1.關于配置
app/builde.gradle
dependencies {
compile 'com.github.bumptech.glide:glide:4.4.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.4.0'
}
Project:build.gradle
repositories {
mavenCentral()
maven { url 'https://maven.google.com' }
}
2.基本用法:加載三步走
Glide.with(this)
.load(myUrl)
.into(imageView);
3.V3遷移到V4做的比較大的改變
-
在V3版本,選項由一系列復雜的異構建造者(multityped builders)單獨處理。比如BitmapRequestBuilder、DrawableRequestBuilder、GifRequestBuilder等。但是Glide v4 中,由一個單一類型的唯一一個建造者接管一系列選項對象,即RequestBuilder
在 Glide v4 版本中,只存在一個RequestBuilder對應一個你正在試圖加載的【類型】(Bitmap 、Drawable、GifDrawable等)。RequestBuilder可以直接訪問對這個加載過程有影響的選項,包括你想加載的【數據模型】(url, uri、file等),可能存在的【略縮圖】請求,以及任何的【監聽器】,也是使用【into】開始加載的地方。
-
在V3版本,我們通常會把許多選項在load和into之間,以流式API的形式串聯起來,比如
//在v3版本
Glide.with(this)
.load(url)
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.override(100, 100)
.into(imageView);
placeholder方法指定占位圖
error方法指定異常占位圖
diskCacheStrategy磁盤緩存策略
override指定圖片大小
我們也可以在中間指定圖片格式asBitmap()或者asGif()
或者指定圖片展示類型centerCrop()等
對于這些API,在V4上大部分選項被移動到了一個單獨的稱為 RequestOptions 的對象中。RequestOptions 允許你一次指定一系列的選項,然后對多個加載重用它們:
RequestOptions options = new RequestOptions()
.centerCrop()
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.priority(Priority.HIGH);
RequestOptions myOptions = new RequestOptions()
.fitCenter()
.override(100, 100);
Glide.with(fragment)
.load(url)
.apply(myOptions)
.into(drawableView);
Glide.with(fragment)
.asBitmap()
.apply(myOptions)
.load(url)
.into(bitmapView);
-
變換,對于V3版本,對應不同的變化有不同的類,
v3
但是對于V4版本來說,Glide v4 里的Transformations 現在會替換之前設置的任何變換。在 Glide v4 中,如果你想應用超過一個的Transformation,你需要使用transforms()方法,使用實例:
Glide.with(fragment)
.load(url)
.apply(new RequestOptions().transforms(new CenterCrop(), new RoundedCorners(20)))
.into(target);
在這里我只提出幾個重要的改變,還有其它的,比如過渡動畫等,點擊這個鏈接查找從v3遷移到v4
4.Generated API
如果我們還是想要像v3一樣使用流式api,而不是每次要new RequestOptions等,不需要手動在調用apply。Glide 現在也提供了一套可以為應用定制化生成的 API。應用可以通過包含一個標記了 AppGlideModule的實現來訪問生成的 API。如果你不了解這是怎么工作的,可以查看 Generated API
【如何配置Generated API】:
1.在 Application 模塊中,創建一個新類 MyAppGlideModule
這個類的特點是有 @GlideModule 注解,繼承自 AppGlideModule。
此類可生成出一個流式 API,內聯了多種選項,和集成庫中自定義的選項:
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;
@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}
2.生成的 API 默認名為GlideApp,與AppGlideModule的子類包名相同。在 Application 模塊中將Glide.with()替換為GlideApp.with(),即可使用該 API 去完成加載工作。
在沒有使用 Generated API 時,請求大概長這樣:
Glide.with(fragment)
.load(url)
.apply(centerCropTransform()
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.priority(Priority.HIGH))
.into(imageView);
使用 Generated API,RequestOptions 的調用可以被內聯:
GlideApp.with(fragment)
.load(url)
.centerCrop()
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.priority(Priority.HIGH)
.into(imageView);
使用Generated API,還是可以使用生成的 RequestOptions 子類來應用相同的選項到多次加載中;但生成的 RequestBuilder 子類可能在多數情況下更為方便。
5.列舉一些使用實例:
在v3版本,對于圓角和圓形圖片我們是需要自定義Transformation的,但是v4已經幫我們封裝好直接使用了。這點看之前總結的文章有提到Android加載圓角圖片、圓形圖片的三種方式
-
圓角實現
GlideApp.with(context)
.load(url)
.transform(new RoundedCorners(20)) //此處為圓角px值
.into(iv);
-
圓形實現
GlideApp.with(context)
.load(TextUtils.isEmpty(url)?url:new MyGlideUrl(url))
.transform(new CircleCrop(context))
.into(iv);
-
占位符
Placeholder 請求圖片加載中
Error 請求圖片加載錯誤
Fallback 請求url/model為空
GlideApp.with(fragment)
.load(url)
.placeholder(R.drawable.placeholder)
.error(new ColorDrawable(Color.RED))
.fallback(new ColorDrawable(Color.GREY))
.into(view);
6.寫到最后,文章只是挑了一點經典的常用的改變,不會面面俱到,如果沒有你需要的,可以查看官網給出的文檔查閱學習:點這里
關于Glide系列的其他文章:
Glide源碼分析流程思維導圖
【兩篇就懂系列】Glide源碼分析之加載圖片流程(1/2)
【兩篇就懂系列】Glide源碼分析之加載圖片流程(2/2)
【一篇就懂系列】Glide源碼分析之緩存處理
Glide圖片加載庫從v3遷移到v4的改變和使用