1. 程式人生 > >實現評論頁面的五星評價和圖片選擇(可拖動)

實現評論頁面的五星評價和圖片選擇(可拖動)

先上圖:
在這裡插入圖片描述在這裡插入圖片描述

https://github.com/simonFong/CommentDemo
想用的直接到github下載就可以了,星星控制元件和新增圖片的控制元件在imageadd的lib裡

使用方法:
1.下載lib,匯入自己的工程
2.星星控制元件
直接在自己的佈局檔案裡新增

 <com.simonfong.imageadd.addImage.ui.RatingBar
            android:id="@+id/pingjia_star"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginLeft="15dp"
            android:layout_toRightOf="@+id/textView"
            android:gravity="center"
            app:starCount="5"
            app:starEmpty="@drawable/rating_small_empty"
            app:starFill="@drawable/rating_small_full"
            app:starHalf="@drawable/rating_small_half"
            app:starImageSize="35dp"
            app:starPadding="1dp"
            app:stepSize="Half"/>

屬性:

 <declare-styleable name="RatingBar">
        <!--尺寸值-->
        <attr name="starImageSize" format="dimension" />
        <!--星星間距-->
        <attr name="starPadding" format="dimension" />
        <!--星星總數-->
        <attr name="starCount" format="integer" />
        <!--空白的星星資原始檔值-->
        <attr name="starEmpty" format="reference" />
        <!--滿星資原始檔值-->
        <attr name="starFill" format="reference" />
        <!--半星資原始檔值-->
        <attr name="starHalf" format="reference" />
        <!--是否可點選boolean值-->
        <attr name="clickable" format="boolean" />
        <!--當前進度float值-->
        <attr name="starStep" format="float" />
        <!--每次進度方式的值,整星還是半星-->
        <attr name="stepSize">
            <enum name="Half" value="0" />
            <enum name="Full" value="1" />
        </attr>
    </declare-styleable>

3.新增圖片控制元件
demo裡使用的是imagepicker作為獲取圖片源的第三方庫,這裡出現了一個問題

1.新增圖片選擇器 jeasonlzy/ImagePicker
版本為'com.android.support:appcompat-v7:27.1.1'出現兩個問題
      
      a.會報多個不同版本錯誤,需要統一版本

      Error:Execution failed for task ':app:preDebugBuild'.
      > Android dependency 'com.android.support:appcompat-v7' has different version for the compile (27.0.2) and runtime (27.1.1) classpath. You should manually set the same version via DependencyResolution
      解決方式:
      需要在專案的build.gradle新增程式碼,統一版本:
      configurations.all {
               resolutionStrategy.eachDependency { DependencyResolveDetails details ->
                   def requested = details.requested
                   if (requested.group == 'com.android.support') {
                       if (!requested.name.startsWith("multidex")) {
                           details.useVersion '27.1.1'
                       }
                   }
               }
           }
           
           
      b.compileSdkVersion 版本 27 及以上,大圖返回列表時資料空了
      java.lang.RuntimeException: Unable to resume activity {cn.dlc.zizhuyinliaoji.myapplication/com.lzy.imagepicker.ui.ImageGridActivity}: java.lang.IndexOutOfBoundsException
      解決方式:
      1.把版本講到27以下,或者27版本以上的27.0.2/27.0.3,這兩個測試可用,其他沒有測試
      2.使用修改後的imagepicker-library,即在ImageDataSource類裡onLoadFinished方法imageFolders.clear();前面加上程式碼
      if ((activity.getLifecycle().getCurrentState() == STARTED || activity.getLifecycle().getCurrentState() == RESUMED) && imageFolders.size() > 0) {
      return;
      }
      再匯入工程,解決(修改後的庫在demo也有提供)

新增圖片控制元件直接在佈局檔案裡新增:

 <com.simonfong.imageadd.addImage.ui.AddPicView
      android:id="@+id/apv_select_pic"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      app:max_num="9"
      app:show_delete_pic="true"
      app:can_drag="true"
      app:single_line_show_num="3"/>

屬性:

<declare-styleable name="AddPicView">
      <!--允許新增的最大數量-->
      <attr name="max_num" format="integer"/>
      <!--一行顯示的最大數量-->
      <attr name="single_line_show_num" format="integer"/>
      <!--是否顯示刪除按鈕-->
      <attr name="show_delete_pic" format="boolean"/>
      <!--刪除按鈕的資原始檔-->
      <attr name="close_drawable_res" format="reference"/>
      <!--圖片是否可拖動-->
      <attr name="can_drag" format="boolean"/>

  </declare-styleable>