Glide.with()方法用于创建一个加载图片的实例.with()方法可以接受Context,Activity或者fragment类型的参数,

activity或者fragment被销毁的时候,图片加载也会停止,如果传入的是ApplicationContext,那么只有当应用程序被杀掉的时候,图片加载才会停止;Glide并没有办法知道Activity的生命周期,于是Glide就使用了添加隐藏Fragment的这种小技巧,因为Fragment的生命周期和Activity是同步的,如果Activity被销毁了,Fragment是可以监听到的,这样Glide就可以捕获这个事件并停止图片加载了。

Glide支持加载各种各样的图片资源,包括网络图片,本地图片,应用资源,二进制流,Uri对象等等;

Glide可以指定图片大小,例如方法: .override(100, 100);这样Glide就只会将图片加载成100*100像素的尺寸,也不用管你的imageview的大小是多少

Glide的缓存设计可以说是非常先进的,考虑的场景也很周全。在缓存这一功能上,Glide又将它分成了两个模块,一个是内存缓存,一个是硬盘缓存。内存缓存: 默认情况下,Glide自动就是开启内存缓存的,如果需要禁用内存缓存功能,只需要调用skipMemoryCache()方法并传入true,就表示禁用掉Glide的内存缓存功能;首先会将缓存图片从activeResources中移除,然后再将它put到LruResourceCache当中。这样也就实现了正在使用中的图片使用弱引用来进行缓存,不在使用中的图片使用LruCache来进行缓存的功能。

硬盘缓存: 这个diskCacheStrategy()方法基本上就是Glide硬盘缓存功能的一切,它可以接收四种参数:

DiskCacheStrategy.NONE: 表示不缓存任何内容。

DiskCacheStrategy.SOURCE: 表示只缓存原始图片。

DiskCacheStrategy.RESULT: 表示只缓存转换过后的图片(默认选项)。

DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。

重写这个getCacheKey()方法可以解决缓存Key的问题

Glide提供了预加载的接口,也就是preload()方法,preload()方法的用法也非常简单,直接使用它来替换into()方法即可;

需要注意的是,我们如果使用了preload()方法,最好要将diskCacheStrategy的缓存策略指定成DiskCacheStrategy.SOURCE。

因为preload()方法默认是预加载的原始图片大小,而into()方法则默认会根据ImageView控件的大小来动态决定加载图片的大小。因此,如果不将diskCacheStrategy的缓存策略指定成DiskCacheStrategy.SOURCE的话,很容易会造成我们在预加载完成之后再使用into()方法加载图片,却仍然还是要从网络上去请求图片这种现象。

preload()方法有两个方法重载,带参数的preload()方法来明确指定图片的宽和高,不带参数的preload()方 法,它会在内部自动将图片的宽和高都指定成Target.SIZE_ORIGINAL,也就是图片的原始尺寸

downloadOnly(int width, int height)是用于在子线程中下载图片的,而downloadOnly(Y target)是用于在主线程中下载图片的。

listener() 在into()方法之前串接了一个listener()方法,然后实现了一个RequestListener的实例。

其中RequestListener需要实现两个方法,一个onResourceReady()方法,一个onException()方法。

当图片加载完成的时候就会回调onResourceReady()方法,

而当图片加载失败的时候就会回调onException()方法,onException()方法中会将失败的Exception参数传进来

dontTransform()方法表示让Glide在加载图片的过程中不进行图片变换,这样刚才调用的applyCenterCrop()、applyFitCenter()就统统无效了。或者直接调用override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)方法来强转将图片尺寸指定为原始大小就行了;

调用方法override()、centerCrop()、transform(new CircleCrop(this))组合能实现图片变换功能;

第三方库glide-transformations实现了很多通用的图片变换效果,例如裁剪变色,图片转换,模糊变换等等;例如:

模糊化处理:

Glide.with(this)
.load(url)
.bitmapTransform(new BlurTransformation(this))
.into(imageView);

黑白化效果:

Glide.with(this)
.load(url)
.bitmapTransform(new GrayscaleTransformation(this))
.into(imageView);

同时执行模糊化和黑白化的变换:

Glide.with(this)
.load(url)
.bitmapTransform(new BlurTransformation(this), new GrayscaleTransformation(this))
.into(imageView);