Android 九宮格圖片展示的實現

添加圖片效果圖:

添加滿 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();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章