From 65a6bde49652558ada5daa15eca03d5061465a00 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期五, 27 十二月 2024 18:00:46 +0800
Subject: [PATCH] 1.图片上传进度相关代码。 2.修复地图定位图标不居中问题。

---
 app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java |  151 ++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 114 insertions(+), 37 deletions(-)

diff --git a/app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java b/app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java
index b5bd809..b30b0fa 100644
--- a/app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java
+++ b/app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java
@@ -6,15 +6,19 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ImageView;
+import android.widget.RelativeLayout;
 import android.widget.TextView;
 
+import androidx.annotation.NonNull;
 import androidx.recyclerview.widget.RecyclerView;
 
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.load.engine.DiskCacheStrategy;
 import com.dayu.pipirrapp.R;
+import com.dayu.pipirrapp.bean.net.UplodFileState;
 import com.dayu.pipirrapp.listener.OnItemLongClickListener;
-import com.luck.picture.lib.adapter.holder.PreviewGalleryAdapter;
+import com.dayu.pipirrapp.utils.MyLog;
+import com.king.view.circleprogressview.CircleProgressView;
 import com.luck.picture.lib.config.PictureMimeType;
 import com.luck.picture.lib.config.SelectMimeType;
 import com.luck.picture.lib.entity.LocalMedia;
@@ -22,6 +26,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * AddPictureAdapter -
@@ -37,27 +42,16 @@
     public static final int TYPE_PICTURE = 2;
     private final LayoutInflater mInflater;
     private final ArrayList<LocalMedia> list = new ArrayList<>();
+    Map<String, UplodFileState> fileStates;
     private int selectMax = 9;
+    private Context mContext;
 
-    /**
-     * 鍒犻櫎
-     */
-    public void delete(int position) {
-        try {
 
-            if (position != RecyclerView.NO_POSITION && list.size() > position) {
-                list.remove(position);
-                notifyItemRemoved(position);
-                notifyItemRangeChanged(position, list.size());
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    public AddPictureAdapter(Context context, List<LocalMedia> result) {
+    public AddPictureAdapter(Context context, List<LocalMedia> result, Map<String, UplodFileState> fileStates) {
         this.mInflater = LayoutInflater.from(context);
         this.list.addAll(result);
+        this.mContext = context;
+        this.fileStates = fileStates;
     }
 
     public void setSelectMax(int selectMax) {
@@ -78,19 +72,6 @@
         }
     }
 
-    public static class ViewHolder extends RecyclerView.ViewHolder {
-
-        ImageView mImg;
-        ImageView mIvDel;
-        TextView tvDuration;
-
-        public ViewHolder(View view) {
-            super(view);
-            mImg = view.findViewById(R.id.fiv);
-            mIvDel = view.findViewById(R.id.iv_del);
-            tvDuration = view.findViewById(R.id.tv_duration);
-        }
-    }
 
     @Override
     public int getItemCount() {
@@ -113,6 +94,7 @@
     /**
      * 鍒涘缓ViewHolder
      */
+    @NonNull
     @Override
     public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
         View view = mInflater.inflate(R.layout.item_add_filter_image, viewGroup, false);
@@ -128,24 +110,24 @@
      * 璁剧疆鍊�
      */
     @Override
-    public void onBindViewHolder(final ViewHolder viewHolder, final int position) {
+    public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int position) {
         //灏戜簬MaxSize寮狅紝鏄剧ず缁х画娣诲姞鐨勫浘鏍�
         if (getItemViewType(position) == TYPE_CAMERA) {
             viewHolder.mImg.setImageResource(R.mipmap.ic_add_image);
-            viewHolder.mImg.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View view) {
-                    if (mItemClickListener != null) {
-                        mItemClickListener.openPicture();
-                    }
+            viewHolder.mImg.setOnClickListener(view -> {
+                if (mItemClickListener != null) {
+                    mItemClickListener.openPicture();
                 }
             });
             viewHolder.mIvDel.setVisibility(View.INVISIBLE);
+            viewHolder.circleProgressView.setVisibility(View.GONE);
         } else {
+            //鍒犻櫎鍥剧墖
             viewHolder.mIvDel.setVisibility(View.VISIBLE);
             viewHolder.mIvDel.setOnClickListener(view -> {
                 int index = viewHolder.getAbsoluteAdapterPosition();
                 if (index != RecyclerView.NO_POSITION && list.size() > index) {
+                    mItemClickListener.onDeleteClick(index);
                     list.remove(index);
                     notifyItemRemoved(index);
                     notifyItemRangeChanged(index, list.size());
@@ -178,6 +160,29 @@
                         .diskCacheStrategy(DiskCacheStrategy.ALL)
                         .into(viewHolder.mImg);
             }
+
+            // 鏇存柊杩涘害
+            UplodFileState uplodFileState = fileStates.get(media.getCompressPath());
+            uplodFileState.setAdapterPosition(position);
+            MyLog.d("progressRequestBodyHolder>>>" + "State:" + uplodFileState.getState() + ">>>position:" + position + ">>>Progress: " + uplodFileState.getProgress());
+
+            if (uplodFileState.getState() == UplodFileState.STATE_UPDING) {
+                if (uplodFileState.getProgress() < 100) {
+                    viewHolder.maskLayerBg.setVisibility(View.VISIBLE);
+                    viewHolder.circleProgressView.setVisibility(View.VISIBLE);
+                    viewHolder.circleProgressView.setProgress(uplodFileState.getProgress());
+
+                } else {
+                    viewHolder.circleProgressView.setVisibility(View.GONE);
+                    viewHolder.maskLayerBg.setVisibility(View.GONE);
+                }
+            } else if (fileStates.get(media.getCompressPath()).getState() ==  UplodFileState.STATE_DONE) {
+                viewHolder.maskLayerBg.setVisibility(View.GONE);
+                viewHolder.circleProgressView.setVisibility(View.GONE);
+            } else {
+                viewHolder.maskLayerBg.setVisibility(View.VISIBLE);
+            }
+
             //itemView 鐨勭偣鍑讳簨浠�
             if (mItemClickListener != null) {
                 viewHolder.itemView.setOnClickListener(v -> {
@@ -193,6 +198,33 @@
                     return true;
                 });
             }
+        }
+    }
+
+    /**
+     * 鏇存柊杩涘害
+     *
+     * @param uplodFileState
+     */
+    public void updateProgress(UplodFileState uplodFileState) {
+        MyLog.d("updateProgress>>>" + "State:" + uplodFileState.getState() + ">>>position:" + uplodFileState.getAdapterPosition() + ">>>Progress: " + uplodFileState.getProgress());
+
+        // 鏇存柊杩涘害鍙傛暟
+        if (fileStates.containsKey(uplodFileState.getFilePath())) {
+            if (uplodFileState.getState()==0){
+                // 鑾峰彇宸叉湁鐨� UplodFileState 瀵硅薄骞舵洿鏂拌繘搴�
+                UplodFileState existingState = fileStates.get(uplodFileState.getFilePath());
+                existingState.setProgress(uplodFileState.getProgress()); // 鏇存柊杩涘害
+                // 鑾峰彇杩涘害鏇存柊椤圭殑浣嶇疆
+                int position = existingState.getAdapterPosition();
+                if (position != RecyclerView.NO_POSITION) {
+                    // 閫氱煡閫傞厤鍣ㄥ埛鏂版寚瀹氫綅缃殑椤�
+                    notifyItemChanged(position);
+                }
+            }else if (uplodFileState.getState()==2){
+
+            }
+
         }
     }
 
@@ -215,6 +247,13 @@
          * Open PictureSelector
          */
         void openPicture();
+
+        /**
+         * 鍒犻櫎浜嗘煇涓�涓�
+         *
+         * @param position
+         */
+        void onDeleteClick(int position);
     }
 
     private OnItemLongClickListener mItemLongClickListener;
@@ -222,4 +261,42 @@
     public void setItemLongClickListener(OnItemLongClickListener l) {
         this.mItemLongClickListener = l;
     }
+
+
+    /**
+     * 鍒犻櫎
+     */
+    public void delete(int position) {
+        try {
+            if (position != RecyclerView.NO_POSITION && list.size() > position) {
+                list.remove(position);
+                notifyItemRemoved(position);
+                notifyItemRangeChanged(position, list.size());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static class ViewHolder extends RecyclerView.ViewHolder {
+
+        ImageView mImg;
+        ImageView mIvDel;
+        ImageView postError;
+        TextView tvDuration;
+        RelativeLayout maskLayerBg;
+        CircleProgressView circleProgressView;
+
+
+        public ViewHolder(View view) {
+            super(view);
+            mImg = view.findViewById(R.id.fiv);
+            mIvDel = view.findViewById(R.id.iv_del);
+            tvDuration = view.findViewById(R.id.tv_duration);
+            circleProgressView = view.findViewById(R.id.cpv);
+            maskLayerBg=view.findViewById(R.id.mask_layer_bg);
+            postError=view.findViewById(R.id.postError);
+        }
+    }
+
 }
\ No newline at end of file

--
Gitblit v1.8.0