简介
github:https://github.com/bumptech/glide
Glide是一款由Bump Technologies开发的图片加载框架,使得我们可以在Android平台上以极度简单的方式加载和展示图片。
目前,Glide最新的稳定版本是4.0.0
使用
Gradle
在build.gradle(Module:XXX)添加依赖1
2
3
4dependencies {
compile 'com.github.bumptech.glide:glide:4.0.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0'
}
基本用法
1 | Glide.with(this).load(url).into(imageView); |
with()方法,用于创建一个加载图片的实例。with()方法可以接收Context、Activity或者Fragment类型的参数。
注意:with()方法中传入的实例会决定Glide加载图片的生命周期,如果传入的是Activity或者Fragment的实例,那么当这个Activity或Fragment被销毁的时候,图片加载也会停止。如果传入的是ApplicationContext,那么只有当应用程序被杀掉的时候,图片加载才会停止。
load()方法,用于指定待加载的图片资源。Glide支持加载各种各样的图片资源,包括网络图片、本地图片、应用资源、二进制流、Uri对象等等。其他用法如下:
1 | // 加载本地图片 |
into()方法,用于指定显示图片的ImageView上。把这个ImageView的实例传进去就可以了,后续会列举into方法更丰富的用法。
占位图
占位图有两种:加载占位图和异常占位图。
加载占位图是指在加载图片的等待时间内加载一张临时图片,等图片加载出来后再替换掉。
异常占位图是指在由于网络信号差等异常情况下,导致图片加载失败,加载异常占位图。
需要new RequestOptions对象,placeholder()设置加载占位图,error()设置异常占位图。
1 | RequestOptions options = new RequestOptions() |
指定加载格式
使用Glide可以很方便的加载GIF图片,并不需要编写什么额外的代码,Glide内部会自动判断图片格式。
1 | Glide.with(this) |
所以不管我们传入的是一张普通图片,还是一张GIF图片,Glide都会自动进行判断,并且可以正确地把它解析并展示出来。
如果说希望加载的这张图必须是一张静态图片,不需要Glide自动判断它到底是静图还是GIF图。这s时需要指定加载格式。
1 | Glide.with(this) |
asBitmap()
方法就是只允许加载静态图片,不需要Glide去自动进行图片格式的判断,当加载GIF图的时候,会加载GIF图的第一帧。
还有asGif()
方法,用来强制指定加载动态图片。asFile()
方法和asDrawable()
方法,分别用于强制指定文件格式的加载和Drawable格式的加载。
指定图片大小
实际上,使用Glide在大多数情况下是不需要指定图片大小的,因为Glide会自动根据ImageView的大小来决定图片的大小,以此保证图片不会占用过多的内存从而引发OOM。
如果必须给图片指定一个固定的大小,可以使用RequestOptions类中的override()
方法来指定加载图片的尺寸。
1 | RequestOptions options = new RequestOptions() |
现在只Glide会将图片加载成 100 × 100 像素的尺寸,而不会管ImageView的大小是多少了。
如果想加载一张图片的原始尺寸的话,可以使用Target.SIZE_ORIGINAL关键字,如下所示:
1 | RequestOptions options = new RequestOptions() |
这样的话,Glide就不会再去自动压缩图片,而是会去加载图片的原始尺寸。当然,这种写法也会面临着更高的OOM风险。
缓存
Glide缓存有两个模块,一个是内存缓存,一个是硬盘缓存。这两种缓存模块相互结合才构成了Glide极佳的图片缓存效果。
内存缓存
内存缓存的主要作用是防止应用重复将图片数据读取到内存当中。
Glide默认就是开启内存缓存的。当使用Glide加载了一张图片之后,这张图片就会被缓存到内存当中,只要在它还没从内存中被清除之前,下次使用Glide再加载这张图片都会直接从内存当中读取,而不用重新从网络或硬盘上读取了,这样就可以大幅度提升图片的加载效率。比如在一个RecyclerView当中反复上下滑动,RecyclerView中只要是Glide加载过的图片都可以直接从内存当中迅速读取并展示出来,从而大大提升了用户体验。
当然Glide也提供了禁用内存缓存方法,设置skipMemoryCache()
:
1 | RequestOptions options = new RequestOptions() |
磁盘缓存
硬盘缓存的主要作用是防止应用重复从网络或其他地方重复下载和读取数据。
Glide通过设置diskCacheStrategy()
,传入参数来设置磁盘缓存策略,Glide4.0之后提供了5种缓存策略:
- DiskCacheStrategy.NONE: 表示不缓存任何内容。
- DiskCacheStrategy.DATA: 表示只缓存原始图片。
- DiskCacheStrategy.RESOURCE: 表示只缓存转换过后的图片。
- DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。
- DiskCacheStrategy.AUTOMATIC: 表示让Glide根据图片资源智能地选择使用哪一种缓存策略(默认选项)。
1 | RequestOptions options = new RequestOptions() |
清除缓存
1 | //清除内存缓存,必须在主线程中执行 |
小结
以上就是关于Glide v4的基本用法,只是简单整理了相关使用方法,具体的介绍可以参考Glide官方的中文文档。