Android Studio如何将drawable目录下图片做成可选画廊供用户选取
Android Studio实现drawable资源图片画廊选择方案
你可以用AndroidX的RecyclerView实现横向滚动的画廊选择效果,具体操作步骤如下:
1. 引入依赖
在你的Module级build.gradle文件的dependencies块中添加RecyclerView依赖(已引入可跳过):
dependencies { // 版本可替换为你项目匹配的最新稳定版 implementation "androidx.recyclerview:recyclerview:1.3.2" }
添加后同步项目即可。
2. 创建画廊单图Item布局
新建布局文件item_gallery_image.xml,用于展示每个可选的缩略图:
<?xml version="1.0" encoding="utf-8"?> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/iv_gallery_item" android:layout_width="100dp" android:layout_height="100dp" android:layout_margin="8dp" android:scaleType="centerCrop" android:background="@drawable/selector_gallery_item" />
你可以额外创建一个selector选中状态样式selector_gallery_item.xml,实现选中时加边框的高亮效果,不需要也可以直接跳过。
3. 实现RecyclerView适配器
新建适配器类GalleryAdapter.java:
import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.GalleryViewHolder> { private Context context; private int[] imageResArray; private OnItemClickListener listener; // 记录选中位置 private int selectedPos = 0; public interface OnItemClickListener { void onItemClick(int imageResId, int position); } public GalleryAdapter(Context context, int[] imageResArray, OnItemClickListener listener) { this.context = context; this.imageResArray = imageResArray; this.listener = listener; } @NonNull @Override public GalleryViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item_gallery_image, parent, false); return new GalleryViewHolder(view); } @Override public void onBindViewHolder(@NonNull GalleryViewHolder holder, int position) { int resId = imageResArray[position]; holder.ivItem.setImageResource(resId); // 切换选中状态 holder.itemView.setSelected(selectedPos == position); holder.itemView.setOnClickListener(v -> { selectedPos = holder.getAdapterPosition(); listener.onItemClick(resId, selectedPos); notifyDataSetChanged(); }); } @Override public int getItemCount() { return imageResArray.length; } public static class GalleryViewHolder extends RecyclerView.ViewHolder { ImageView ivItem; public GalleryViewHolder(@NonNull View itemView) { super(itemView); ivItem = itemView.findViewById(R.id.iv_gallery_item); } } }
4. 在Activity中初始化画廊
在你要展示画廊的Activity布局中添加RecyclerView:
<androidx.recyclerview.widget.RecyclerView android:id="@+id/rv_gallery" android:layout_width="match_parent" android:layout_height="120dp" android:layout_marginVertical="16dp" />
之后在Activity的onCreate方法中初始化控件:
// 你已经定义好的图片资源数组 int image[] = {R.drawable.example, R.drawable.sue}; RecyclerView rvGallery = findViewById(R.id.rv_gallery); // 设置横向滚动布局,实现画廊效果 rvGallery.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)); // 初始化适配器 GalleryAdapter adapter = new GalleryAdapter(this, image, (imageResId, position) -> { // 这里拿到用户选中的图片资源ID,做后续逻辑处理 // 比如把选中的图片展示到大图区域:ivBig.setImageResource(imageResId); }); rvGallery.setAdapter(adapter);
运行后就能实现横向滚动、点击选中的画廊效果,和你参考的目标效果一致。
内容的提问来源于stack exchange,提问作者chen abien
相关产品推荐
相关产品推荐

