Glide的使用

前言

最近有几个项目在使用Glide来加载图片,郭神最近也在写Glide的相关博客,所以准备花时间研究下Glide,作为总结和笔记
郭神Glide的简单使用传送门:http://blog.csdn.net/guolin_blog/article/details/53759439

现状

Android的图片加载框架有很多,从UniversalImageLoader,到后来Google推出的Volley,再到后来的新兴军Glide和Picasso,当然还有Facebook的Fresco。每个框架都有自己的优势和不足,没有最好的,只有合适的,所以需要根据不同的项目来自行选取。

特点

功能强大:能配置占位图、异常占位图、 使用了3级缓存、支持加载gif图片等。
调用简单:一般只需要一行代码就可以完成图片的加载。

使用

1)将库导入到项目,在app/build.gradle文件中增加如下依赖

dependencies { 
    compile 'com.github.bumptech.glide:glide:3.7.0'//该地址不是github上的地址,而是jcenter仓库上的地址
}

2)在AndroidManifest.xml中声明网络权限

<uses-permissionandroid:name="android.permission.INTERNET" />

3)简单地加载图片

public void simpleLoadImage(Context context, String imageUrl, ImageView imageView) {
    Glide.with(context).load(imageUrl).into(imageView);
}

上述流程就是一个最基本的加载网络图片的流程。是不是很简单啊,下面看看Glide的其他用法。

4)占位图,当需要在加载成功之前显示默认图片时,就需要设置占位图了,代码如下,其实就是在load方法和into方法之前增加了placeholder方法,Glide的其他功能也是类似的调用流程。

public void loadWithPlaceHolder(Context context, String imageUrl, Drawable phDrawable, ImageView imageView) {
    Glide.with(context)
    .load(imageUrl)
    .placeholder(phDrawable)
    .into(imageView);
}

5)异常占位符,Glide可以设置一张图片,用于加载图片失败时显示。

public void loadWithError(Context context, String imageUrl, int phId, int errorId, ImageView imageView) {
    Glide.with(context)
    .load(imageUrl)
    .placeholder(phId)
    .error(errorId)
    .into(imageView);
    }

6)禁用文件缓存,Glide默认是为我们提供了三级缓存功能,当我们不需要时(加载Gif图片时就需要禁止,否则Glide会对Gif图对每一帧都进行缓存,这样就会导致第一次加载的时间特别长),可以通过如下代码设置Glide不进行文件缓存。

public void loadWithNoDiskCache(Context context, String imageUrl, int phId, ImageView imageView) {
    Glide.with(context)
    .load(imageUrl)
    .placeholder(phId)
    .diskCacheStrategy(DiskCacheStrategy.NONE)
    .into(imageView);
    }

7)加载Gif图,Glide默认是支持Gif图的,不需要任何额外配置,要注意的是,需要禁止文件缓存,否则第一次会很慢。
但是如果我们不希望加载Gif图,而只允许加载静态图片,就可以调用asBitmap方法,这时候,就去取Gif图的第一帧用于展示。

private void loadAsBitmap(Context context, String imageUrl, int phId, int errorId, ImageView imageView) {
    Glide.with(context)
    .load(imageUrl)
    .asBitmap()
    .placeholder(phId)
    .error(errorId)
    .diskCacheStrategy(DiskCacheStrategy.NONE)
    .into(imageView);
    }

与之对应,如果我们只想加载Gif图,可以调用asGif方法,这时候,如果加载的是静态图,就会加载失败。

private void loadAsGif(Context context, String imageUrl, int phId, int errorId, ImageView imageView) {
    Glide.with(context)
    .load(imageUrl)
    .asGif()
    .placeholder(phId)
    .error(errorId)
    .diskCacheStrategy(DiskCacheStrategy.NONE)
    .into(imageView);
    }

8)指定大小,一般来说使用Glide加载图片,不要指定图片大小,Glide会根据ImageView的大小去决定图片的大小。不过Glide也提供了override方法用于指定加载图片的大小。

private void loadWithWH(Context context, String imageUrl, int width, int height, ImageView imageView) {
    Glide.with(context)
    .load(imageUrl)
    .diskCacheStrategy(DiskCacheStrategy.NONE)
    .override(width, height)
    .into(imageView);
    }

9)清理缓存,使用Glide加载图片时,Glide会帮我们进行内存缓存和文件缓存,其中文件缓存使用的DiskLruCache,Glide为此也提供了清理缓存的方法,我们可以使用clearMemory来清理内存缓存(主线程),使用clearDiskCache来清理文件缓存(子线程)。

private void clearCache(final Activity activity) {
    if (Thread.currentThread() == Looper.getMainLooper().getThread()) { //主线程
    //清理内存,需要在主线程
    Glide.get(activity).clearMemory();
    new Thread(new Runnable() {
        @Override
        public void run() {
            //清理文件缓存,需要在子线程
            Glide.get(activity).clearDiskCache();
        }
    }).start();
    } else { //子线程
        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Glide.get(activity).clearMemory();
            }
        });
        Glide.get(activity).clearDiskCache();
    }
}

后续会继续更新该博客Glide的使用

知其然,也要知其所以然,Glide的源码分析传送门:http://blog.csdn.net/luofen521/article/details/71213440

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值