Glide入門教程——16.用Modules定制Glide

Glide — 用Modules定制Glide

原文:Customize Glide with Modules
作者:Norman Peitek
翻譯:Dexter0218

上篇文章,我們介紹了如何設(shè)置一些網(wǎng)絡(luò)協(xié)議棧去加載圖片。本質(zhì)上,集成網(wǎng)絡(luò)庫沒啥其他特殊的,就是定義一個(gè)GlideModule來定制Glide的行為。這篇文章,我們會對Glide Modules進(jìn)行概述。

Glide 系列概覽

  1. 入門簡介
  2. 高級加載
  3. 適配器(ListView, GridView)
  4. 占位圖& 淡入淡出動畫
  5. 圖片大小 & 縮放
  6. 播放GIF & 視頻
  7. 緩存基礎(chǔ)
  8. 請求優(yōu)先級
  9. 縮略圖
  10. 回調(diào):定制view中使用SimpleTarget和ViewTarget
  11. 通知欄和桌面小控件的圖片加載
  12. 異常: 調(diào)試和報(bào)錯(cuò)處理
  13. 自定義變換
  14. 用animate()定制動畫
  15. 整合網(wǎng)絡(luò)協(xié)議棧
  16. 用Modules定制Glide
  17. Glide Module 案例: 接受自簽名HTTPS證書
  18. Glide Module 案例: 自定義緩存
  19. Glide Module 案例: 通過加載自定義大小圖片優(yōu)化
  20. 動態(tài)使用 Model Loaders
  21. 如何旋轉(zhuǎn)圖片
  22. 系列綜述

Glide Modules

Glide modules是一個(gè)全局改變Glide行為的抽象的方式。你需要創(chuàng)建Glide的實(shí)例,來訪問GlideBuilder??梢酝ㄟ^創(chuàng)建一個(gè)公共的類,實(shí)現(xiàn)GlideModule的接口來定制Glide:

public class SimpleGlideModule implements GlideModule {  
    @Override public void applyOptions(Context context, GlideBuilder builder) {
        // todo
    }

    @Override public void registerComponents(Context context, Glide glide) {
        // todo
    }
}

接口提供了兩個(gè)方法去調(diào)節(jié)Glide的不同部分,本文中,我們大部分內(nèi)容只研究第一個(gè)方法:applyOptions(Context context, GlideBuilder builder)。

你已經(jīng)知道需要創(chuàng)建一個(gè)額外的類去自定義Glide。下一步是要在全局中聲明這個(gè)類,這樣Glide知道它應(yīng)該加載并使用它。Glide會掃描AndroidManifest.xml的Glide modules的meta定義。這樣,你必須在AndroidManifest.xml里的<application>標(biāo)簽下聲明剛創(chuàng)建的Glide module。

<manifest

    ...

    <application>

        <meta-data
            android:name="io.futurestud.tutorials.glide.glidemodule.SimpleGlideModule"
            android:value="GlideModule" />

        ...

    </application>
</manifest>  

確保你設(shè)置android:name為你自己的包名+類名,這樣才能正確引用。你不需要添加其他的代碼到其中。如果你想要禁止Glide Module,只要從AndroidManifest.xml里移除它。Java類里的代碼可以留著供以后使用。當(dāng)在AndroidManifest.xml里沒有引用的時(shí)候,它永遠(yuǎn)不會被加載。

Glide推薦實(shí)現(xiàn)自定義module的方式有一個(gè)好處:你可以一次同時(shí)聲明多個(gè)Glide Module。Glide會(沒有特殊的順序)都遍歷所有聲明的module。由于你當(dāng)前未定義順序,確保你的定制不會造成沖突!

GlideBuilder

你已經(jīng)知道如何使用Glide module去自定義Glide?,F(xiàn)在我們看一下接口的第一個(gè)方法:applyOptions(Context context, GlideBuilder builder)。這個(gè)方法將GlideBuilder的對象當(dāng)作參數(shù),并且是void返回類型,所以你在這個(gè)方法里能調(diào)用GlideBuilder可以用的方法。

  • .setMemoryCache(MemoryCache memoryCache)
  • .setBitmapPool(BitmapPool bitmapPool)
  • .setDiskCache(DiskCache.Factory diskCacheFactory)
  • .setDiskCacheService(ExecutorService service)
  • .setResizeService(ExecutorService service)
  • .setDecodeFormat(DecodeFormat decodeFormat)

顯而易見,GlideBuilder對象可以讓你訪問到Glide的核心部分。使用文中的方法,你可以改變磁盤緩存、內(nèi)存緩存等等。

我們以后會看更高級的部分,但現(xiàn)在我們選擇最簡單的改變方式:.setDecodeFormat(DecodeFormat decodeFormat)。

使用例子:提升Glide的圖片質(zhì)量

Android里有兩個(gè)方法去解析圖片:ARGB8888RGB565。第一個(gè)為每個(gè)像素采用4 byte表示,后面一個(gè)則用2 byte表示。ARG8888有更高的圖片質(zhì)量,并且能夠存儲一個(gè)alpha通道。當(dāng)Picasso使用ARGB888時(shí),Glide默認(rèn)使用低質(zhì)量的RGB565。Glide用戶的好消息:你可以通過使用Glide module方法改變解析格式。

你只要簡單地實(shí)現(xiàn)一個(gè)GlideModule,像之前提到的一樣,然后調(diào)用builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888),并傳入正確的枚舉型參數(shù)。

public class SimpleGlideModule implements GlideModule {  
    @Override public void applyOptions(Context context, GlideBuilder builder) {
        builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
    }

    @Override public void registerComponents(Context context, Glide glide) {
        // nothing to do here
    }
}

如果你能正確地跟上我們的步驟,Glide現(xiàn)在可以使用更高質(zhì)量的圖片解析。另外一個(gè)方法改變Glide行為的方式也是一樣。代碼里的registerComponents()會有點(diǎn)不一樣,以后介紹。

總結(jié)

本文中,你已經(jīng)學(xué)會了Glide module的基礎(chǔ)知識。你應(yīng)當(dāng)能夠感受到什么時(shí)候會有用,怎樣去實(shí)現(xiàn)它們。如果你仍然需要更多的信息??纯聪旅娴馁Y源鏈接。特別地,如果你需要更多關(guān)于在庫項(xiàng)目或者如何使用ProGuard等實(shí)現(xiàn)Glide module的說明,確保再看看那里提供的內(nèi)容。

既然這是個(gè)非常復(fù)雜的內(nèi)容。后面的文章會介紹另一個(gè)實(shí)際的例子:如何在GlideModule里使用registerComponents()去實(shí)現(xiàn)從自簽名HTTPS認(rèn)證的服務(wù)器獲取圖片。

資源

Github內(nèi)關(guān)于 Glide中的GlideModules的資源。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,716評論 25 709
  • 一、簡介 在泰國舉行的谷歌開發(fā)者論壇上,谷歌為我們介紹了一個(gè)名叫Glide的圖片加載庫,作者是bumptech。這...
    天天大保建閱讀 7,747評論 2 28
  • 一、概述 前面說的都是如何使用Glide提供的接口來展示圖片資源,今天這篇,我們來講一下如何改變Glide的配置。...
    澤毛閱讀 20,409評論 2 22
  • 我是一名即將畢業(yè)的大學(xué)生,同學(xué)們都在實(shí)習(xí),只有我在家準(zhǔn)備明年的公務(wù)員考試,其實(shí)心里有時(shí)是你寂寞的,習(xí)慣忙碌的生活,...
    我叫許前進(jìn)閱讀 535評論 0 1
  • 前一段把很多公眾號屏蔽了,因?yàn)闀l(fā)很多東西,使自己分心,可是現(xiàn)在還是不能完全靜下心來,自己一直有一個(gè)目標(biāo),就是開一...
    齊寶寶520閱讀 205評論 0 0

友情鏈接更多精彩內(nèi)容