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 系列概覽
- 入門(mén)簡(jiǎn)介
- 高級(jí)加載
- 適配器(ListView, GridView)
- 占位圖& 淡入淡出動(dòng)畫(huà)
- 圖片大小 & 縮放
- 播放GIF & 視頻
- 緩存基礎(chǔ)
- 請(qǐng)求優(yōu)先級(jí)
- 縮略圖
- 回調(diào):定制view中使用SimpleTarget和ViewTarget
- 通知欄和桌面小控件的圖片加載
- 異常: 調(diào)試和報(bào)錯(cuò)處理
- 自定義變換
- 用animate()定制動(dòng)畫(huà)
- 整合網(wǎng)絡(luò)協(xié)議棧
- 用Modules定制Glide
- Glide Module 案例: 接受自簽名HTTPS證書(shū)
- Glide Module 案例: 自定義緩存
- Glide Module 案例: 通過(guò)加載自定義大小圖片優(yōu)化
- 動(dòng)態(tài)使用 Model Loaders
- 如何旋轉(zhuǎn)圖片
- 系列綜述
自定義圖片大小
提示:如果你沒(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)。