1.概述
刚才有说到,有些朋友觉得Glide 4相对于Glide 3改动非常大,其实不然。之所以大家会有这种错觉,是因为你将Glide 3的用法直接搬到Glide 4中去使用,结果IDE全面报错,然后大家可能就觉得Glide 4的用法完全变掉了。
其实Glide 4相对于Glide 3的变动并不大,只是你还没有了解它的变动规则而已。一旦你掌握了Glide 4的变动规则之后,你会发现大多数Glide 3的用法放到Glide 4上都还是通用的。
我对Glide 4进行了一个大概的研究之后,发现Glide 4并不能算是有什么突破性的升级,而更多是一些API工整方面的优化。相比于Glide 3的API,Glide 4进行了更加科学合理地调整,使得易读性、易写性、可扩展性等方面都有了不错的提升。但如果你已经对Glide 3非常熟悉的话,并不是就必须要切换到Glide 4上来,因为Glide 4上能实现的功能Glide 3也都能实现,而且Glide 4在性能方面也并没有什么提升。
但是对于新接触Glide的朋友而言,那就没必要再去学习Glide 3了,直接上手Glide 4就是最佳的选择了。
好了,对Glide 4进行一个基本的概述之后,接下来我们就要正式开始学习它的用法了。刚才我已经说了,Glide 4的用法相对于Glide 3其实改动并不大。在前面的七篇文章中,我们已经学习了Glide 3的基本用法、缓存机制、回调与监听、图片变换、自定义模块等用法,那么今天这篇文章的目标就很简单了,就是要掌握如何在Glide 4上实现之前所学习过的所有功能,那么我们现在就开始吧。
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卡读写权限需要动态申请权限,但是这里不需要处理权限,
因为Android/data/包名/cache/这个目录google专门留出来,给各个app缓存数据
@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) {
}
}
网友评论