自定义图片预览框架
2018-12-19 本文已影响8人
WhenMeet
图片预览我们一般是利用ViewPager和ImageView完成,另外将数据的设置暴露出来即可,下面给出效果图:
图二
图三
大概就是这个效果,可以展示任意张图片,可以设置默认展示第几张图片,图片也可以放大缩小,看起来也是非常简单的,下面让我们看看如何使用。
首先需要介绍一个类:MyImageLoader
public class MyImageLoader implements PreImageLoader {
@Override
public void showView(Context context, ImageView img, PreImageHolder imgUrl) {
Glide.with(context).load(imgUrl.getPath()).into(img);
}
}
PreImageLoader 我们已经写好了,MyImageLoader 是我们自己定义的一个类,只需要继承PreImageLoader 即可,通过下面的几个参数,就可以成功设置我们的图片资源到图片控件上。
具体使用时,调用下面方法:
PreImageConfige.getInstance().setImageLoader(new MyImageLoader());
将里面的内容new MyImageLoader()进行替换即可。
设置好这个,我们在看看具体使用方法:
List<PreImageHolder> imageList = new ArrayList<>();
for (int i = 0; i < entity.getImglist().size(); i++) {
PreImageHolder preImageHolder = new PreImageHolder();
preImageHolder.path = entity.getImglist().get(i);
imageList.add(preImageHolder);
}
Intent intent = new Intent(context, PreImageActivity.class);
intent.putExtra(CACHE_IMAGE, (Serializable) imageList);
intent.putExtra(PRE_DEFAULT_CHOSE, position + 1);
context.startActivity(intent);
可以看到我们传入了一个集合和一个数字,前一个代表我们的图片资源即可,后面的代表当前应该展示哪一张图片,如果不传默认展示第一张。我们还注意到了PreImageHolder这个类,这个类我们也是需要认识一下的,其实也就是封装图片一些信息的一个类,简单看下写法:
public class PreImageHolder implements Serializable, Parcelable {
public String name; //图片的名字
public String path; //图片的路径
public long size; //图片的大小
public int width; //图片的宽度
public int height; //图片的高度
public String mimeType; //图片的类型
public long addTime; //图片的创建时间
/** 图片的路径和创建时间相同就认为是同一张图片 */
@Override
public boolean equals(Object o) {
if (o instanceof PreImageHolder) {
PreImageHolder item = (PreImageHolder) o;
return this.path.equalsIgnoreCase(item.path) && this.addTime == item.addTime;
}
return super.equals(o);
}
}
大致包含一些我们需要的信息,这就足够了,具体的实现方法的话,大家就参考我的代码吧,这里就不再贴出了,感谢,咱们下回讲解图片的缓存和压缩处理。
代码点我1-1