版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/zeqiao/article/details/84335521
添加图片效果图:
添加满 9 张图片效果图:
添加文件相关文章:《图片操作框架 TakePhoto 的引入》
长按删除图片效果图:
删除弹窗相关文章:《常用代码整理:Android 常用弹窗整理》
采用 RecyclerView.Adapter 实现九宫格:
public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.MyViewHolder> {
private List<String> mData;
private final int mCountLimit = 9;
private OnItemClickListener mOnItemClickListener;
public interface OnItemClickListener {
void onTakePhotoClick();
void onItemLongClick(View view, int position);
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.mOnItemClickListener = onItemClickListener;
}
public ImageAdapter(List<String> data) {
this.mData = data;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
ImageView imageView = new ImageView(parent.getContext());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(SizeUtil.dip2px(parent.getContext(), 95), SizeUtil.dip2px(parent.getContext(), 95));
params.setMargins(10, 10, 10, 10);
params.gravity = Gravity.CENTER;
imageView.setLayoutParams(params);
return new MyViewHolder(imageView);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
if (position == getItemCount() - 1 && mData.size() < mCountLimit) {
holder.imageView.setImageResource(R.mipmap.detal_icon_add);
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnItemClickListener.onTakePhotoClick();
}
});
} else {
// 本地图片
Glide.with(BaseApplication.getInstance().getApplicationContext()).load(new File(mData.get(position))).into(holder.imageView);
// 网络图片
// Glide.with(BaseApplication.getInstance().getApplicationContext()).load(mData.get(position)).into(holder.imageView);
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 点击操作,后续可添加点击后的响应
}
});
// 长按监听
holder.imageView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
mOnItemClickListener.onItemLongClick(v, position);
return true;
}
});
}
}
@Override
public int getItemCount() {
// 满 9张图就不让其添加新图
if (mData != null && mData.size() >= mCountLimit) {
return mCountLimit;
} else {
return mData == null ? 1 : mData.size() + 1;
}
}
class MyViewHolder extends RecyclerView.ViewHolder {
private ImageView imageView;
private MyViewHolder(View itemView) {
super(itemView);
imageView = (ImageView) itemView;
}
}
}
调用代码:
mRlvImage.setLayoutManager(new GridLayoutManager(DetailActivity.this, 3));
mImageAdapter = new ImageAdapter(mSDImageList);
mImageAdapter.setOnItemClickListener(new ImageAdapter.OnItemClickListener() {
@Override
public void onTakePhotoClick() {
showImageDialog();
}
@Override
public void onItemLongClick(View view, int position) {
showDeletePop(view, position);
}
});
mRlvImage.setAdapter(mImageAdapter);
// 添加图片
mSDImageList.add(imageUri);
mImageAdapter.notifyDataSetChanged();
// 长按删除
mSDImageList.remove(position);
mImageAdapter.notifyDataSetChanged();