自定义图片预览框架

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

上一篇下一篇

猜你喜欢

热点阅读