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