美文网首页
自定义图片预览框架

自定义图片预览框架

作者: WhenMeet | 来源:发表于2018-12-19 20:29 被阅读8次

        图片预览我们一般是利用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

    相关文章

      网友评论

          本文标题:自定义图片预览框架

          本文链接:https://www.haomeiwen.com/subject/ixsskqtx.html