美文网首页Android 干货自定义views Android开发经验
基于Glide V4.0封装的GlideImageView,可监

基于Glide V4.0封装的GlideImageView,可监

作者: 孙福生微博 | 来源:发表于2017-06-19 18:53 被阅读5269次

    GlideImageView 是基于Glide V4.0设计的,实现如下特性:

    1、通过提供的属性可以设置图片的圆角、边框。
    2、可以设置点击触摸图片时的颜色、透明度。
    3、一行代码加载来自网络、res、SDCard中的图片,可加载成圆形。
    4、可以监听加载图片时的进度。

    下面这张图是设置了图片的圆角、边框并设置了触摸图片时的颜色

    一行代码加载来自网络、res、SDCard中图片

    public GlideImageView loadImage(String url, int placeholderResId);
    public GlideImageView loadLocalImage(@DrawableRes int resId, int placeholderResId); 
    public GlideImageView loadLocalImage(String localPath, int placeholderResId);
    

    一行代码加载来自网络、res、SDCard中图片成圆形

    public GlideImageView loadCircleImage(String url, int placeholderResId); 
    public GlideImageView loadLocalCircleImage(int resId, int placeholderResId);
    public GlideImageView loadLocalCircleImage(String localPath, int placeholderResId);
    

    如果你觉得上面的方法还不能满足你,那么你可以通过下面的方法追加自己想要的属性来加载图片

    RequestOptions requestOptions(int placeholderResId);
    RequestOptions circleRequestOptions(int placeholderResId);
    
    GlideImageView load(int resId, RequestOptions options);
    GlideImageView load(Uri uri, RequestOptions options);
    GlideImageView load(String url, RequestOptions options);
    

    如果你还是觉得得不到满足,好吧,我提供了GlideImageLoader类加载图片,比如这样加载图片:先加载缩略图再加载高清图片,并监听加载的进度

    private void loadImage(String image_url_thumbnail, String image_url) {
        RequestOptions requestOptions = glideImageView.requestOptions(R.color.black)
                .centerCrop()
                .skipMemoryCache(true) // 跳过内存缓存
                .diskCacheStrategy(DiskCacheStrategy.NONE); // 不缓存到SDCard中
    
        glideImageView.getImageLoader().setOnGlideImageViewListener(image_url, new OnGlideImageViewListener() {
            @Override
            public void onProgress(int percent, boolean isDone, GlideException exception) {
                progressView.setProgress(percent);
                progressView.setVisibility(isDone ? View.GONE : View.VISIBLE);
            }
        });
    
        glideImageView.getImageLoader().requestBuilder(image_url, requestOptions)
                .thumbnail(Glide.with(ImageActivity.this) // 加载缩略图
                        .load(image_url_thumbnail)
                        .apply(requestOptions))
                .transition(DrawableTransitionOptions.withCrossFade()) // 动画渐变加载
                .into(glideImageView);
    }
    

    该库提供两种监听加载图片进度的Listener,总有一款是你想要的

    public interface OnGlideImageViewListener {
        void onProgress(int percent, boolean isDone, GlideException exception);
    }
    
    public interface OnProgressListener {
        void onProgress(String imageUrl, long bytesRead, long totalBytes, boolean isDone, GlideException exception);
    }
    

    GitHub地址

    关于我

    个人邮箱:sfsheng0322@126.com

    GitHub主页

    简书主页

    个人博客

    新浪微博

    相关文章

      网友评论

      • 4f3571f08886:大神缓存路径在哪啊 ,怎么设置自己的缓存路径
      • J_Leo:通过添加依赖可以实现上面的效果,可是怎么去除触摸图片有灰色阴影的效果呢?
      • 咘諟倪:发现个问题,控件的点击事件需有ScrollView作为容器时才能触发,不然触发不了点击事件
        咘諟倪:补充一点,好像控件的点击事件存在触发不了的情况,就是点击灵敏度与正常的ImageVew控件有很大的差距
      • 根号仨:添加过度动画后transition(DrawableTransitionOptions.withCrossFade()),图片加载不会显示,使用Imageview过渡动画就没问题
      • 5014161d46ba:您好,项目框架依赖了Glide4.2,然后您的框架也依赖了,所以报java.util.zip.ZipException: duplicate entry: com/bumptech/glide/GeneratedAppGlideModuleImpl.class异常,请问您知道怎么解决吗?
      • feng_斩月:怎么计算gift播放时间
      • 我喂自己袋丶夏洛克:建议作者把注释写一写,没注释有一些方法的参数不知道什么作用,去看sample也没能找到对应的比如public GlideImageView loadLocalCircleImage(int resId, int placeholderResId);
      • 649d89c36d8a:加载本地相册的 图片详情怎么加进度条 因为没有缩略图的
        孙福生微博: @卢诗如 这个做不了吧,暂时没思路😀
      • 许大虎:两个问题
        1 有些不需要加载动画的时候咋办?因为那个AppGlideModule是全局的吧,只运行一次。这样都被拦截了。
        2 采用这种方式,好像缓存就被影响了。
      • a16bf6ec86bf:添加依赖 Error:Execution failed for task ':app:prepareDebugAndroidTestDependencies'.
        > Dependency Error. See console for details. 是怎么回事
        e7931506b063:apply plugin: 'com.android.application'

        ....
        android{
        defaultConfig{
        ....
        ...
        javaCompileOptions {
        annotationProcessorOptions {
        includeCompileClasspath true
        }
        }
        }
        }
        在build.gradle中添加这段代码就好了
        a16bf6ec86bf: @孙福生微博 只添加依赖就可以是吗?还用添加别的吗
        孙福生微博:@赵大哈 是不是你的网有问题? 现在问题解决了吗?
      • 才兄说:作者问一下,Glide4.0中,需要使用到模糊效果,这个API怎么调用。之前Glide的版本都有如.bitmapTransform(new BlurTransformation(context,23,4))的入口,发现4.0的结构改变还是蛮大的,设置高斯模糊入口你知道么?
        才兄说:.transform(new BlurTransformation(getContext(), 23, 4));找到了,查看了下Glide4.0文档,并且注意BlurTransformation类实现方法有变动,替换一下即可
      • 03a9db709e59:如果一个非imageview需要加载图片呢:blush:
        03a9db709e59:@孙福生微博 谢谢大神
        孙福生微博: @猫的戒指 那你就用里面的GlideImageLoader加载吧
      • c82bf09cf357:你好,有源码吗?想拜读一下。
        孙福生微博: @加菲糖 😀
        c82bf09cf357:找到了,github有源码,很厉害,嗯。

      本文标题:基于Glide V4.0封装的GlideImageView,可监

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