Glide入門(mén)教程——20.動(dòng)態(tài)使用 Model Loaders

Glide — 動(dòng)態(tài)使用 Model Loaders

原文:Dynamically Use Model Loaders
作者:Norman Peitek
翻譯:Dexter0218

上篇文章,你見(jiàn)過(guò)了如何聲明和創(chuàng)建一個(gè)可以添加圖片大小到請(qǐng)求里的Glide module。這是非常強(qiáng)大的優(yōu)化。然而,重要的是聲明Glide module總是主動(dòng)的。默認(rèn)情況下,你不能動(dòng)態(tài)開(kāi)啟或關(guān)閉他們。

在本文中,你會(huì)學(xué)習(xí)如何為單獨(dú)的請(qǐng)求在網(wǎng)絡(luò)上注冊(cè)一個(gè)自定義model loader。

Glide 系列概覽

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

自定義圖片大小

提示:如果你沒(méi)有讀之前的文章,確保你看了。否則下面內(nèi)容會(huì)讓你困惑。

作個(gè)快速回顧:通常Glide請(qǐng)求是從GlideUrl類中生成。上篇文章,我們展示了如何創(chuàng)建一個(gè)新的接口,額外將寬度和高度添加到考慮范圍:

public interface CustomImageSizeModel {  
    String requestCustomSizeUrl(int width, int height);
}

我們創(chuàng)建了它的一個(gè)實(shí)例,向我們的Future Studio服務(wù)器傳遞了額外尺寸圖片的URL。

public static class CustomImageSizeModelFutureStudio implements CustomImageSizeModel {

    String baseImageUrl;

    public CustomImageSizeModelFutureStudio(String baseImageUrl) {
        this.baseImageUrl = baseImageUrl;
    }

    @Override
    public String requestCustomSizeUrl(int width, int height) {
        return baseImageUrl + "?w=" + width + "&h=" + height;
    }
}

最后,但并非最不重要的,我們必須創(chuàng)造customimagesizeurlloader,傳遞高度和寬度到我們model的實(shí)現(xiàn):

public static class CustomImageSizeUrlLoader extends BaseGlideUrlLoader<CustomImageSizeModel> {  
    public CustomImageSizeUrlLoader(Context context) {
        super( context );
    }

    @Override
    protected String getUrl(CustomImageSizeModel model, int width, int height) {
        return model.requestCustomSizeUrl( width, height );
    }
}

Model Loaders的.using()的動(dòng)態(tài)使用

目前為止,我們上面的代碼聲明的Glide module。Glide會(huì)為每個(gè)單獨(dú)的請(qǐng)求使用它。如果你不希望那樣,通過(guò)在AndroidManifest.xml里移除來(lái)關(guān)閉你的Glide module。我們可以那樣做,是因?yàn)镚lide提供了.using()方法為一個(gè)單獨(dú)請(qǐng)求去指定一個(gè)模型:

String baseImageUrl = "https://futurestud.io/images/example.png";  
CustomImageSizeModel customImageRequest = new CustomImageSizeModelFutureStudio( baseImageUrl );

Glide  
        .with( context )
        .using( new CustomImageSizeUrlLoader( context ) )
        .load( customImageRequest )
        .into( imageView1 );

正如你上面所見(jiàn),我們?yōu)榧虞d優(yōu)化尺寸的圖片,創(chuàng)建了一個(gè)CustomImageSizeModelFutureStudio對(duì)象。由于我們沒(méi)有在Glide module里聲明CustomImageSizeModel接口,我們必須在上一行用.using(new CustomImageSizeUrlLoader( context ) )方法指定它。Glide會(huì)只為這個(gè)請(qǐng)求使用這個(gè)模型。其他的所有請(qǐng)求,即使他們也從CustomImageSizeModel實(shí)例構(gòu)建,也不生效。

展望

本文中,你學(xué)會(huì)了如何為一個(gè)具體的請(qǐng)求使用指定請(qǐng)求模型。如果你不要或者不能使用AndroidManifest里的Glide modules,這對(duì)你是一個(gè)簡(jiǎn)單的選擇。

本文中,你已經(jīng)完成了深入學(xué)習(xí)Glide module和他們的使用方式。下期,我們會(huì)把這個(gè)系列整合起來(lái)。

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

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

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