From 4f7f99c6ea914bcd38de78bd8371be566026b905 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期三, 26 二月 2025 15:54:14 +0800
Subject: [PATCH] -为按钮和列表项添加波纹效果,以获得更好的视觉反馈 -改进MapFragment中的底部布局动画 -在MapFragment中添加设备状态和RTU地址显示 -更新BaseListResult以支持泛型类型 -为设备数据添加IntakeListResult和IntakeResult -通过数据库支持增强标记位置更新功能 -添加电话拨号意图以分隔标记详细信息 -通过过期检查改进磁贴缓存 -添加问题报告的确认对话框 -更新登录活动以限制用户名长度 -为波纹效果和UI元素添加新颜色 -重构XML布局以使用新的波纹图 -改进MapFragment中的错误处理和用户反馈
---
app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java | 173 +++++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 135 insertions(+), 38 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..94c9611 100644
--- a/app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java
+++ b/app/src/main/java/com/dayu/pipirrapp/adapter/AddPictureAdapter.java
@@ -2,19 +2,24 @@
import android.content.Context;
import android.net.Uri;
+import android.text.TextUtils;
import android.view.LayoutInflater;
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 +27,7 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
/**
* AddPictureAdapter -
@@ -37,27 +43,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 final 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 +73,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 +95,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 +111,25 @@
* 璁剧疆鍊�
*/
@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);
+ viewHolder.maskLayerBg.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());
@@ -176,22 +160,85 @@
.centerCrop()
.placeholder(R.color.app_color_f6)
.diskCacheStrategy(DiskCacheStrategy.ALL)
+ .thumbnail(0.25f)
.into(viewHolder.mImg);
}
+
+ // 鏇存柊杩涘害
+ UplodFileState uplodFileState = TextUtils.isEmpty(media.getCompressPath())
+ ? fileStates.get(media.getRealPath())
+ : fileStates.get(media.getCompressPath());
+ if (uplodFileState != null) {
+ MyLog.d("progressRequestBodyHolder>>>" + "path:" + uplodFileState.getFilePath() + ">>>position:" + position);
+ uplodFileState.setAdapterPosition(position);
+ MyLog.d("progressRequestBodyHolder>>>" + "State:" + uplodFileState.getState() + ">>>position:" + position + ">>>Progress: " + uplodFileState.getProgress());
+
+ if (uplodFileState.getState() == UplodFileState.STATE_UPDING) {
+ MyLog.d("progressRequestBodyHolder>>>" + "姝e湪涓婁紶");
+ viewHolder.postError.setVisibility(View.GONE);
+ 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 (uplodFileState.getState() == UplodFileState.STATE_DONE) {
+ MyLog.d("progressRequestBodyHolder>>>" + "瀹屾垚");
+ viewHolder.maskLayerBg.setVisibility(View.GONE);
+ viewHolder.circleProgressView.setVisibility(View.GONE);
+ } else {
+ MyLog.d("progressRequestBodyHolder>>>" + "閿欒");
+ viewHolder.maskLayerBg.setVisibility(View.VISIBLE);
+ viewHolder.postError.setVisibility(View.VISIBLE);
+ viewHolder.circleProgressView.setVisibility(View.GONE);
+ }
+ }
+
+
//itemView 鐨勭偣鍑讳簨浠�
if (mItemClickListener != null) {
viewHolder.itemView.setOnClickListener(v -> {
int adapterPosition = viewHolder.getAbsoluteAdapterPosition();
mItemClickListener.onItemClick(v, adapterPosition);
});
+ viewHolder.postError.setOnClickListener(v -> {
+ mItemClickListener.onReUpload(uplodFileState);
+ });
}
if (mItemLongClickListener != null) {
viewHolder.itemView.setOnLongClickListener(v -> {
- int adapterPosition = viewHolder.getAbsoluteAdapterPosition();
+ int adapterPosition = viewHolder.getBindingAdapterPosition();
mItemLongClickListener.onItemLongClick(viewHolder, adapterPosition, v);
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())) {
+ // 鑾峰彇宸叉湁鐨� UplodFileState 瀵硅薄骞舵洿鏂拌繘搴�
+ UplodFileState existingState = fileStates.get(uplodFileState.getFilePath());
+ int position = existingState.getAdapterPosition();
+ existingState.setState(uplodFileState.getState());
+ if (uplodFileState.getState() == 0) {
+ existingState.setState(uplodFileState.getState());
+ existingState.setProgress(uplodFileState.getProgress()); // 鏇存柊杩涘害
+ // 鑾峰彇杩涘害鏇存柊椤圭殑浣嶇疆
+ }
+ if (position != RecyclerView.NO_POSITION) {
+ notifyItemChanged(position);
}
}
}
@@ -215,6 +262,18 @@
* Open PictureSelector
*/
void openPicture();
+
+ /**
+ * 鍒犻櫎浜嗘煇涓�涓�
+ *
+ * @param position
+ */
+ void onDeleteClick(int position);
+
+ /**
+ * 涓婁紶澶辫触鍚庨噸鏂颁笂浼�
+ */
+ void onReUpload(UplodFileState uplodFileState);
}
private OnItemLongClickListener mItemLongClickListener;
@@ -222,4 +281,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