1.概述
剛才有說到见妒,有些朋友覺得Glide 4相對于Glide 3改動非常大,其實不然甸陌。之所以大家會有這種錯覺须揣,是因為你將Glide 3的用法直接搬到Glide 4中去使用,結果IDE全面報錯钱豁,然后大家可能就覺得Glide 4的用法完全變掉了返敬。
其實Glide 4相對于Glide 3的變動并不大,只是你還沒有了解它的變動規(guī)則而已寥院。一旦你掌握了Glide 4的變動規(guī)則之后劲赠,你會發(fā)現(xiàn)大多數(shù)Glide 3的用法放到Glide 4上都還是通用的。
我對Glide 4進行了一個大概的研究之后秸谢,發(fā)現(xiàn)Glide 4并不能算是有什么突破性的升級凛澎,而更多是一些API工整方面的優(yōu)化。相比于Glide 3的API估蹄,Glide 4進行了更加科學合理地調整塑煎,使得易讀性、易寫性臭蚁、可擴展性等方面都有了不錯的提升最铁。但如果你已經對Glide 3非常熟悉的話,并不是就必須要切換到Glide 4上來垮兑,因為Glide 4上能實現(xiàn)的功能Glide 3也都能實現(xiàn)冷尉,而且Glide 4在性能方面也并沒有什么提升。
但是對于新接觸Glide的朋友而言系枪,那就沒必要再去學習Glide 3了雀哨,直接上手Glide 4就是最佳的選擇了。
好了私爷,對Glide 4進行一個基本的概述之后雾棺,接下來我們就要正式開始學習它的用法了。剛才我已經說了衬浑,Glide 4的用法相對于Glide 3其實改動并不大捌浩。在前面的七篇文章中,我們已經學習了Glide 3的基本用法工秩、緩存機制尸饺、回調與監(jiān)聽宏榕、圖片變換、自定義模塊等用法侵佃,那么今天這篇文章的目標就很簡單了麻昼,就是要掌握如何在Glide 4上實現(xiàn)之前所學習過的所有功能,那么我們現(xiàn)在就開始吧馋辈。
2.使用
⑴依賴
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
⑵加載圖片到imageView
Glide.with(context).load(url).into(iv);
⑶屬性
RequestOptions options = new RequestOptions()
.circleCrop()//圓形圖片
.placeholder(R.drawable.ic_launcher_background)//占位圖,在圖片加載回來之前,使用本地圖片占著位置
.error(R.mipmap.ic_launcher)//加載圖片失敗的時候使用的圖片
.override(300,300)//指定加載圖片的大小
.diskCacheStrategy(DiskCacheStrategy.NONE)//sd卡的緩存,緩存策略
.transform(new RoundedCorners(100))//圓角設置
.transform(new BlurTransformation())//高斯模糊
.transform(new GrayscaleTransformation());//黑白化處理
⑷into()方法
在init()使用SimpleTarget抚芦,可以將網絡鏈接變成一個Drawable
Glide.with(this).load(url).into(new SimpleTarget<Drawable>() {
@Override
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
iv.setImageDrawable(resource);
}
});
⑸preload()方法
Glide.with(this)
.load("http://guolin.tech/book.png")
.preload();
⑹submit()方法
public void downloadImage() {
new Thread(new Runnable() {
@Override
public void run() {
try {
String url = "http://www.guolin.tech/book.png";
final Context context = getApplicationContext();
FutureTarget<File> target = Glide.with(context)
.asFile()
.load(url)
.submit();
final File imageFile = target.get();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(context, imageFile.getPath(), Toast.LENGTH_LONG).show();
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
⑺listener()方法
Glide.with(this)
.load("http://www.guolin.tech/book.png")
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
return false;
}
})
.into(imageView);
⑻自定義模塊
?原來3.x MyAppGlideModule這個類需要在清單文件配置,4.x 不需要,直接添加注解@GlideModule
?ExternalCacheDiskCacheFactory的默認緩存路徑是在sdcard/Android/data/包名/cache/我的圖片
?一般在SD卡讀寫權限需要動態(tài)申請權限迈螟,但是這里不需要處理權限叉抡,
因為Android/data/包名/cache/這個目錄google專門留出來,給各個app緩存數(shù)據(jù)
@GlideModule
public class MyAppGlideModule extends AppGlideModule {
@Override
public void applyOptions(Context context, GlideBuilder builder) {
builder.setDiskCache(new ExternalPreferredCacheDiskCacheFactory(
context,"我的圖片",1024*1024*500));
}
@Override
public void registerComponents(Context context, Glide glide, Registry registry) {
}
}