Android 九宫格图片展示的实现
16lz
2021-01-23
添加图片效果图:
添加满 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();
更多相关文章
- 在Android中使用GIF图片
- android 读取本地超大图片
- Android 图片加水印
- Android数据库操作查询中Cursor类的问题
- Android gallery实现图片的左右循环旋转源码分享
- 通过 http post 方式上传多张图片
- Android 上传图片到服务器(多文件上传)