使用Glide加載圖像很容易,通常情況下只需要一行代碼:
Glide.with(fragment)
.load(myUrl)
.into(imageView);
取消您不再需要的負(fù)載也很簡(jiǎn)單:
Glide.with(fragment).clear(imageView);
盡管清除不再需要的負(fù)載是好的做法,但您不需要這樣做。事實(shí)上,當(dāng)您通過(guò)Glide.with()方法傳入的Activity或者Fragment被銷毀時(shí),Glide將自動(dòng)清除負(fù)載并且回收負(fù)載使用的任何資源。
應(yīng)用程序可以添加恰當(dāng)?shù)淖⒔饨oAppGlideModule實(shí)現(xiàn),以生成靈活的API,其中包含大多數(shù)選項(xiàng),包括在集成庫(kù)中定義的選項(xiàng)。
package com.example.myapp;
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;
@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}
默認(rèn)情況下,生成的API會(huì)跟您的AppGlideModule實(shí)現(xiàn)在同一包下,類名為GlideApp。使用該API,應(yīng)用程序可以在所有的負(fù)載中用GlideApp.with()代替Glide.with()。
GlideApp.with(fragment)
.load(myUrl)
.placeholder(placeholder)
.fitCenter()
.into(imageView);
有關(guān)更多信息,請(qǐng)參閱Glide的生成的API頁(yè)面。
在ListView或者RecyclerView中加載圖像使用相同的加載行,就像加載到單個(gè)的View一樣。Glide會(huì)處理View的復(fù)用跟請(qǐng)求的自動(dòng)取消。
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
String url = urls.get(position);
Glide.with(fragment)
.load(url)
.into(holder.imageView);
}
您不需要檢測(cè)您傳遞的URL是否為空,如果URL為空,Glide會(huì)清除這個(gè)View或者使用您指定的占位圖像,或者回調(diào)的圖像。
Glide唯一的要求是,對(duì)于任何可重用的目標(biāo)View,您可以復(fù)用之前的View加載新的圖像或者調(diào)用clare()API來(lái)顯示的清除。
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if (isImagePosition(position)) {
String url = urls.get(position);
Glide.with(fragment)
.load(url)
.into(holder.imageView);
} else {
Glide.with(fragment).clear(holder.imageView);
holder.imageView.setImageDrawable(specialDrawable);
}
}
通過(guò)調(diào)用clear()或者into(view)方法作用在View上,您可以取消負(fù)載或者保證Glide在調(diào)用完成之后不會(huì)改變View的內(nèi)容。如果您忘記調(diào)用clear()方法并且沒(méi)有在該View上開(kāi)啟新的圖像負(fù)載,那么在復(fù)用之前的位置的View時(shí),您將不能指定Drawable,并且可能會(huì)加載到老的圖像從而改變View的內(nèi)容。
雖然,我們?cè)谶@里展示的示例是RecyclerView,但同樣的原則也適用于ListView。