添加圖片效果圖:
添加滿 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();