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