總結(jié)來(lái)自郭霖的博文: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并沒(méi)有辦法知道Activity的生命周期,于是Glide就使用了添加隱藏Fragment的這種小技巧,因?yàn)镕ragment的生命周期和Activity是同步的逻谦,如果Activity被銷毀了,F(xiàn)ragment是可以監(jiān)聽(tīng)到的盖高,這樣Glide就可以捕獲這個(gè)事件并停止圖片加載了慎陵。Glide支持加載各種各樣的圖片資源,包括網(wǎng)絡(luò)圖片,本地圖片,應(yīng)用資源,二進(jìn)制流,Uri對(duì)象等等;
Glide可以指定圖片大小,例如方法: .override(100, 100);這樣Glide就只會(huì)將圖片加載成100*100像素的尺寸,也不用管你的imageview的大小是多少
-
Glide的緩存設(shè)計(jì)可以說(shuō)是非常先進(jìn)的,考慮的場(chǎng)景也很周全喻奥。在緩存這一功能上席纽,Glide又將它分成了兩個(gè)模塊,一個(gè)是內(nèi)存緩存撞蚕,一個(gè)是硬盤(pán)緩存润梯。內(nèi)存緩存: 默認(rèn)情況下,Glide自動(dòng)就是開(kāi)啟內(nèi)存緩存的,如果需要禁用內(nèi)存緩存功能,只需要調(diào)用skipMemoryCache()方法并傳入true甥厦,就表示禁用掉Glide的內(nèi)存緩存功能;首先會(huì)將緩存圖片從activeResources中移除纺铭,然后再將它put到LruResourceCache當(dāng)中。這樣也就實(shí)現(xiàn)了正在使用中的圖片使用弱引用來(lái)進(jìn)行緩存,不在使用中的圖片使用LruCache來(lái)進(jìn)行緩存的功能刀疙。
硬盤(pán)緩存: 這個(gè)diskCacheStrategy()方法基本上就是Glide硬盤(pán)緩存功能的一切舶赔,它可以接收四種參數(shù):
DiskCacheStrategy.NONE: 表示不緩存任何內(nèi)容。
DiskCacheStrategy.SOURCE: 表示只緩存原始圖片谦秧。
DiskCacheStrategy.RESULT: 表示只緩存轉(zhuǎn)換過(guò)后的圖片(默認(rèn)選項(xiàng))竟纳。
DiskCacheStrategy.ALL : 表示既緩存原始圖片,也緩存轉(zhuǎn)換過(guò)后的圖片疚鲤。
重寫(xiě)這個(gè)getCacheKey()方法可以解決緩存Key的問(wèn)題
-
Glide提供了預(yù)加載的接口,也就是preload()方法锥累,preload()方法的用法也非常簡(jiǎn)單,直接使用它來(lái)替換into()方法即可;
需要注意的是石咬,我們?nèi)绻褂昧藀reload()方法,最好要將diskCacheStrategy的緩存策略指定成DiskCacheStrategy.SOURCE卖哎。
因?yàn)閜reload()方法默認(rèn)是預(yù)加載的原始圖片大小鬼悠,而into()方法則默認(rèn)會(huì)根據(jù)ImageView控件的大小來(lái)動(dòng)態(tài)決定加載圖片的大小。因此亏娜,如果不將diskCacheStrategy的緩存策略指定成DiskCacheStrategy.SOURCE的話焕窝,很容易會(huì)造成我們?cè)陬A(yù)加載完成之后再使用into()方法加載圖片,卻仍然還是要從網(wǎng)絡(luò)上去請(qǐng)求圖片這種現(xiàn)象维贺。preload()方法有兩個(gè)方法重載它掂,帶參數(shù)的preload()方法來(lái)明確指定圖片的寬和高,不帶參數(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)來(lái)-
dontTransform()方法表示讓Glide在加載圖片的過(guò)程中不進(jìn)行圖片變換缎讼,這樣剛才調(diào)用的applyCenterCrop()、applyFitCenter()就統(tǒng)統(tǒng)無(wú)效了坑匠⊙福或者直接調(diào)用override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)方法來(lái)強(qiáng)轉(zhuǎn)將圖片尺寸指定為原始大小就行了;
調(diào)用方法override()、centerCrop()笛辟、transform(new CircleCrop(this))組合能實(shí)現(xiàn)圖片變換功能;
第三方庫(kù)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);