常用布局样式:九宫格图片显示

版权声明:本文为博主原创文章,转载请标明出处。 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();

猜你喜欢

转载自blog.csdn.net/zeqiao/article/details/84335521