總結(jié)來自郭霖的博文:http://blog.csdn.net/guolin_blog/article/details/53759439
Glide.with()方法用于創(chuàng)建一個(gè)加載圖片的實(shí)例.with()方法可以接受Context,Activity或者fragment類型的參數(shù),
activity或者fragment被銷毀的時(shí)候,圖片加載也會(huì)停止,如果傳入的是ApplicationContext,那么只有當(dāng)應(yīng)用程序被殺掉的時(shí)候,圖片加載才會(huì)停止;Glide并沒有辦法知道Activity的生命周期,于是Glide就使用了添加隱藏Fragment的這種小技巧,因?yàn)镕ragment的生命周期和Activity是同步的,如果Activity被銷毀了,F(xiàn)ragment是可以監(jiān)聽到的,這樣Glide就可以捕獲這個(gè)事件并停止圖片加載了。Glide支持加載各種各樣的圖片資源,包括網(wǎng)絡(luò)圖片,本地圖片,應(yīng)用資源,二進(jìn)制流,Uri對象等等;
Glide可以指定圖片大小,例如方法: .override(100, 100);這樣Glide就只會(huì)將圖片加載成100*100像素的尺寸,也不用管你的imageview的大小是多少
-
Glide的緩存設(shè)計(jì)可以說是非常先進(jìn)的,考慮的場景也很周全。在緩存這一功能上,Glide又將它分成了兩個(gè)模塊,一個(gè)是內(nèi)存緩存,一個(gè)是硬盤緩存。內(nèi)存緩存: 默認(rèn)情況下,Glide自動(dòng)就是開啟內(nèi)存緩存的,如果需要禁用內(nèi)存緩存功能,只需要調(diào)用skipMemoryCache()方法并傳入true,就表示禁用掉Glide的內(nèi)存緩存功能;首先會(huì)將緩存圖片從activeResources中移除,然后再將它put到LruResourceCache當(dāng)中。這樣也就實(shí)現(xiàn)了正在使用中的圖片使用弱引用來進(jìn)行緩存,不在使用中的圖片使用LruCache來進(jìn)行緩存的功能。
硬盤緩存: 這個(gè)diskCacheStrategy()方法基本上就是Glide硬盤緩存功能的一切,它可以接收四種參數(shù):
DiskCacheStrategy.NONE: 表示不緩存任何內(nèi)容。
DiskCacheStrategy.SOURCE: 表示只緩存原始圖片。
DiskCacheStrategy.RESULT: 表示只緩存轉(zhuǎn)換過后的圖片(默認(rèn)選項(xiàng))。
DiskCacheStrategy.ALL : 表示既緩存原始圖片,也緩存轉(zhuǎn)換過后的圖片。
重寫這個(gè)getCacheKey()方法可以解決緩存Key的問題
-
Glide提供了預(yù)加載的接口,也就是preload()方法,preload()方法的用法也非常簡單,直接使用它來替換into()方法即可;
需要注意的是,我們?nèi)绻褂昧藀reload()方法,最好要將diskCacheStrategy的緩存策略指定成DiskCacheStrategy.SOURCE。
因?yàn)閜reload()方法默認(rèn)是預(yù)加載的原始圖片大小,而into()方法則默認(rèn)會(huì)根據(jù)ImageView控件的大小來動(dòng)態(tài)決定加載圖片的大小。因此,如果不將diskCacheStrategy的緩存策略指定成DiskCacheStrategy.SOURCE的話,很容易會(huì)造成我們在預(yù)加載完成之后再使用into()方法加載圖片,卻仍然還是要從網(wǎng)絡(luò)上去請求圖片這種現(xiàn)象。preload()方法有兩個(gè)方法重載,帶參數(shù)的preload()方法來明確指定圖片的寬和高,不帶參數(shù)的preload()方 法,它會(huì)在內(nèi)部自動(dòng)將圖片的寬和高都指定成Target.SIZE_ORIGINAL,也就是圖片的原始尺寸
downloadOnly(int width, int height)是用于在子線程中下載圖片的,而downloadOnly(Y target)是用于在主線程中下載圖片的。
listener() 在into()方法之前串接了一個(gè)listener()方法,然后實(shí)現(xiàn)了一個(gè)RequestListener的實(shí)例。
其中RequestListener需要實(shí)現(xiàn)兩個(gè)方法,一個(gè)onResourceReady()方法,一個(gè)onException()方法。
當(dāng)圖片加載完成的時(shí)候就會(huì)回調(diào)onResourceReady()方法,
而當(dāng)圖片加載失敗的時(shí)候就會(huì)回調(diào)onException()方法,onException()方法中會(huì)將失敗的Exception參數(shù)傳進(jìn)來-
dontTransform()方法表示讓Glide在加載圖片的過程中不進(jìn)行圖片變換,這樣剛才調(diào)用的applyCenterCrop()、applyFitCenter()就統(tǒng)統(tǒng)無效了?;蛘咧苯诱{(diào)用override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)方法來強(qiáng)轉(zhuǎn)將圖片尺寸指定為原始大小就行了;
調(diào)用方法override()、centerCrop()、transform(new CircleCrop(this))組合能實(shí)現(xiàn)圖片變換功能;
第三方庫glide-transformations實(shí)現(xiàn)了很多通用的圖片變換效果,例如裁剪變色,圖片轉(zhuǎn)換,模糊變換等等;例如:
模糊化處理:
Glide.with(this)
.load(url)
.bitmapTransform(new BlurTransformation(this))
.into(imageView);
黑白化效果:
Glide.with(this)
.load(url)
.bitmapTransform(new GrayscaleTransformation(this))
.into(imageView);
同時(shí)執(zhí)行模糊化和黑白化的變換:
Glide.with(this)
.load(url)
.bitmapTransform(new BlurTransformation(this), new GrayscaleTransformation(this))
.into(imageView);