Android九宫格图片展示代码实现

0 下载量 86 浏览量 更新于2024-09-04 收藏 192KB PDF 举报
"Android 多图上传后将图片进行九宫格展示的实例代码" 在Android应用开发中,经常需要将多张图片以九宫格的形式展示,这在社交网络或者相册应用中非常常见。这里提供的代码示例是实现这样一个功能的基础框架,通过自定义适配器和布局来完成图片的布局和展示。 首先,我们看到一个名为`NineGridAdapter`的抽象类,它是适配器的基础,用于绑定数据到九宫格视图中。这个适配器需要上下文环境(`Context`)和一个图片URL列表(`List`)。适配器的核心方法包括: 1. `getCount()`: 这个抽象方法返回列表中的元素数量,也就是图片的数量。 2. `getUrl(int position)`: 根据给定的位置索引返回对应的图片URL字符串。 3. `getItem(int position)` 和 `getItemId(int position)`:这些方法通常在ListView或RecyclerView的适配器中用于获取特定位置的数据项和其对应的ID,但在这个特定的案例中,它们也被抽象化,可能需要根据具体需求实现。 4. `getView(int i, View view)`:这个方法负责创建并返回每个单元格的视图。在常规的ListView适配器中,这会创建或复用一个列表项的视图。在这里,可能需要创建一个新的`ImageView`实例并设置相应的图片。 接下来,我们看到了一个自定义的布局类`NineGridLayout`,它继承自`ViewGroup`。这个类主要处理九宫格的布局逻辑,包括图片的排列、间距设置等。其中的关键成员变量和方法有: 1. `adapter`:用于设置和获取适配器对象,使得布局可以获取图片数据。 2. `onItemClickListerner`:点击事件监听器,用于处理用户点击九宫格中的图片时的响应。 3. `lineSpace` 和 `gap`:分别表示行间距和列间距,用于调整九宫格中图片之间的距离。 4. `DEFAULT_WIDTH`:默认的单个图片宽度,这里设置为140。 5. `columns` 和 `rows`:用于计算和存储九宫格的列数和行数。 6. `totalWidth`:整个九宫格的总宽度。 7. `singleWidth` 和 `singleHeight`:单个图片的实际宽度和高度。 8. `defaultWidth` 和 `defaultHeight`:默认图片尺寸。 9. `oldCount`:用于记录之前的图片数量,可能用于优化布局更新。 `NineGridLayout` 类还需要实现一些关键方法,如 `onMeasure()` 和 `onLayout()`,以确定每个子视图(即图片)的位置和大小。同时,它还应该包含一个 `setAdapter(NineGridAdapter adapter)` 方法来设置适配器,并且可能需要实现点击事件的处理,例如通过 `setOnClickListener()` 和 `onItemClickListern()`。 这个实例代码提供了一个基础框架,开发者可以通过继承和扩展这两个类,添加自己的图片加载库(如Glide或Picasso)来加载图片,设置点击事件,以及根据屏幕尺寸动态调整九宫格的布局。在实际项目中,你还需要考虑图片的缩放、裁剪、加载状态显示等问题,以实现一个完整的多图九宫格展示功能。
2019-07-19 上传
NineGridImageView 是一个九宫格图片控件。用法1. 首先添加依赖compile 'com.jaeger.ninegridimageview:library:1.0.0'2. 在布局文件中添加 NineGridImageView, 如下所示:nineGridImageView.setAdapter(nineGridViewAdapter);下面是 NineGridImageViewAdapter.class 的源码:public abstract class NineGridImageViewAdapter {     protected abstract void onDisplayImage(Context context, ImageView imageView, T t);     protected void onItemImageClick(Context context, int index, List list) {          }     protected ImageView generateImageView(Context context) {         GridImageView imageView = new GridImageView(context);         imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);         return imageView;     }}T 是你图片的数据类型, 你可以简单的使用 String 类型也可以是你自定义的类型;你必须重写 onDisplayImage(Context context, ImageView imageView, T t) 方法去设置显示图片的方式, 你可以使用 Picasso、Glide 、ImageLoader 或者其他的图片加载库,你也可以给 ImageView 设置一个占位图;如果你需要处理图片的点击事件,你可以重写 onItemImageClick(Context context, int index, List list) 方法,加上你自己的处理逻辑;如果你要使用自定义的 ImageView,你可以重写 generateImageView(Context context) 方法, 去生成自定的 ImageView。下面是一段示例代码:private NineGridImageViewAdapter mAdapter = new NineGridImageViewAdapter() { @Override protected void onDisplayImage(Context context, ImageView imageView, Photo photo) { Picasso.with(context)                     .load(photo.getSmallUrl)                     .placeholder(R.drawable.ic_default_image)                     .into(imageView);             }         @Override         protected ImageView generateImageView(Context context) {             return super.generateImageView(context);         }         @Override         protected void onItemImageClick(Context context, int index, List photoList) {            showBigPicture(context, photoList.get(index).getBigUrl());         }     };         ... mNineGridImageView.setAdapter(mAdapter);...4. 给 NineGridImageView 设置图片数据:nineGridImageView.setImagesData(List imageDataList);图片展示: