Android圖片框架Glide的總結

總結來自郭霖的博文:http://blog.csdn.net/guolin_blog/article/details/53759439

  1. 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就可以捕獲這個事件并停止圖片加載了。

  2. Glide支持加載各種各樣的圖片資源,包括網(wǎng)絡圖片,本地圖片,應用資源,二進制流,Uri對象等等;

  3. Glide可以指定圖片大小,例如方法: .override(100, 100);這樣Glide就只會將圖片加載成100*100像素的尺寸,也不用管你的imageview的大小是多少

  4. 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的問題
  1. 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)是用于在主線程中下載圖片的。

  2. listener() 在into()方法之前串接了一個listener()方法,然后實現(xiàn)了一個RequestListener的實例。
    其中RequestListener需要實現(xiàn)兩個方法,一個onResourceReady()方法,一個onException()方法。
    當圖片加載完成的時候就會回調onResourceReady()方法,
    而當圖片加載失敗的時候就會回調onException()方法,onException()方法中會將失敗的Exception參數(shù)傳進來

  3. dontTransform()方法表示讓Glide在加載圖片的過程中不進行圖片變換,這樣剛才調用的applyCenterCrop()、applyFitCenter()就統(tǒng)統(tǒng)無效了?;蛘咧苯诱{用override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)方法來強轉將圖片尺寸指定為原始大小就行了;

    調用方法override()、centerCrop()、transform(new CircleCrop(this))組合能實現(xiàn)圖片變換功能;

  4. 第三方庫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);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容