在Android开发中,加载相册图片是一个常见的需求,特别是在创建一个照片选择或分享应用时。本教程将聚焦于如何从用户设备的系统相册中获取并显示图片到一个GridView中。GridView是一个可以自定义列数并且能根据内容自动调整大小的控件,非常适合用于展示图片网格。 我们需要获取系统的相册目录。在Android中,我们可以通过ContentResolver和MediaStore类来获取存储在设备上的所有图片。以下是一个示例代码片段,用于获取所有图片的Uri列表: ```java ContentResolver resolver = getContentResolver(); Cursor cursor = resolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null); if (cursor != null) { while (cursor.moveToNext()) { Uri imageUri = Uri.parse(cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA))); // 将Uri添加到你的数据源,例如ArrayList<Uri> } cursor.close(); } ``` 在获取到图片Uri后,你需要创建一个适配器(Adapter)来填充GridView。这里我们使用自定义的GridViewAdapter,它会处理每个图片项的视图。适配器需要继承BaseAdapter,并实现其方法。例如: ```java public class ImageAdapter extends BaseAdapter { private Context context; private List<Uri> imageUris; public ImageAdapter(Context context, List<Uri> imageUris) { this.context = context; this.imageUris = imageUris; } @Override public int getCount() { return imageUris.size(); } @Override public Object getItem(int position) { return imageUris.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.grid_item_image, parent, false); } ImageView imageView = convertView.findViewById(R.id.image_view); Glide.with(context).load(imageUris.get(position)).into(imageView); return convertView; } } ``` 在这个例子中,我们使用了Glide库来加载图片,它能高效地处理图片的加载、缓存和显示。Glide的用法简单且性能优秀,可以避免内存泄漏和OOM错误。 接下来,将适配器设置给GridView: ```java GridView gridView = findViewById(R.id.gridView); gridView.setAdapter(new ImageAdapter(this, imageUris)); ``` 在布局文件`grid_item_image.xml`中,你可以使用CircleImageView组件来显示圆形图片。CircleImageView是一个开源库,它可以将方形图片转换为圆形,适用于用户头像或需要圆形展示的图片。要使用它,首先在build.gradle文件中添加依赖: ```groovy dependencies { implementation 'com.mikhaellopez:circularimageview:4.2.0' } ``` 然后,在grid_item_image.xml中创建一个CircleImageView: ```xml <com.mikhaellopez.circularimageview.CircleImageView xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/image_view" android:layout_width="wrap_content" android:layout_height="wrap_content" app:civ_border_width="2dp" app:civ_border_color="@android:color/white" /> ``` 别忘了在运行时请求读取存储权限,因为从Android 6.0(API级别23)开始,运行时权限管理变得更为严格: ```java if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_READ_PERMISSION); } ``` 至此,你已经掌握了从系统相册加载图片并显示在GridView的基本步骤。通过自定义适配器和使用第三方库如Glide和CircleImageView,你可以创建一个美观且高效的图片浏览界面。这个过程不仅适用于GridView,也可以应用到其他需要显示图片的场景,如ListView或RecyclerView。
- 1
- 2
- 3
- 4
- 5
- 6
- 12
- XXOOYC2018-07-26不错,可以使用
- hxf_d2017-03-29不错,可以使用
- lxx_10534196682018-08-09不错,就是不是我想要的
- cjllll2018-01-31加载器写得不是很好, 异步处理不行
- 粉丝: 924
- 资源: 72
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助