Glide:快速高效的Android图片加载库,可以自动加载网络、本地文件、app资源中的图片,注重于平滑的滚动
开源地址:https://github.com/bumptech/glide
中文文档:https://muyangmin.github.io/glide-docs-cn/
模块的build.gradle中引入Glide:
implementation 'com.github.bumptech.glide:glide:4.11.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
Glide.with([fragment/Context/View])
.load(url)
.into(imageView);
1)Glide.with中参数是哪个环境变量对象,说明它会和哪个环境变量的生命周期绑定到一起。
Glide的使用大量减少了因为图片导致的OOM的可能。
2)url 可以是一个R.** 的图片资源id,也可以是https.*, 也可以是文件对象
如果是https,则需在AndroidManifest.xml中申请网络权限;如果是文件对象,则需在AndroidManifest.xml中申请存储卡读写权限。
3)into方法将图片传递给指定的ImageView
Glide4中占位图的使用方法,包括(placeholder、error、fallback)三种占位图:
RequestOptions requestOptions = new RequestOptions()
.placeholder(R.drawable.hold)
.error(R.drawable.error)
.fallback(R.drawable.fallback)
.override(100, 100); //override指定加载图片大小,可不设置
Glide.with([fragment/Context/View])
.load(url)
.apply(requestOptions)
.into(imageView);
定义Glide如何从占位符到新加载的图片,或从缩略图到全尺寸图像过渡
交叉淡入(避免占位图还能显示):
RequestOptions requestOptions = new RequestOptions()
.placeholder(R.drawable.hold)
.error(R.drawable.error)
.fallback(R.drawable.fallback)
.override(100, 100); //override指定加载图片大小,可不设置
DrawableCrossFadeFactory factory = new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();
Glide.with(context)
.load(URL)
.apply(requestOptions)
.transaction(DrawableTransitionOptions.withCrossFade(factory)) //过渡
.into((ImageView)holder.itemView);
注意,除了DrawableTransitionOptions之外,还有BitmapTransitionOptions
Glide.with(context).asBitmap()
.load(URL)
.apply(requestOptions)
.transaction(BitmapTransitionOptions.withCrossFade(factory)) //过渡
.into((ImageView)holder.itemView);
为了提升性能,避免在ListView、GridView 或 RecyclerView 加载图片时使用Glide过渡动画
获取资源并修改它,然后返回被修改后的资源。通常变换操作是用来完成剪裁 或 对位图应用过滤器。比如对图片进行圆角配置。
Glide.with(this)
.load(URL)
.transform(new CircleCrop()) //变换
.into(imageView);
1)添加Glide注解处理器的依赖
dependencies{
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
}
可以帮助我们自动生成一个更加简单的Glide对象
2)在 Application 模块中包含一个 AppGlideModule 的实现:
@GlideModule
public final class MyAppGlideModule extends AppGlideModule{} //空函数即可
好处:可以更加简单地完成占位符等配置
之前:
RequestOptions requestOptions = new RequestOptions()
.placeholder(R.drawable.hold)
.error(R.drawable.error)
.fallback(R.drawable.fallback)
.override(100, 100); //override指定加载图片大小,可不设置
DrawableCrossFadeFactory factory = new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();
Glide.with(Context)
.load(URL)
.apply(requestOptions)
.transaction(DrawableTransitionOptions.withCrossFade(factory)) //过渡
.into((ImageView)holder.itemView);
之后:
GlideApp.with(Context).load(URL).placeholder(R.drawable.hold)
注意,不同之处在于不用再创建 RequestOptions 对象了,使得占位符的使用更为简单。
GlideExtension与GlideOption组合
定义一个在频繁使用的选项集合
@GlideExtension
public class MyAppExtension{
private MyAppExtension(){} //这个类需要有一个私有无参构造方法
@GlideOption
public static BaseRequestOptions<?> defaultImg(BaseRequestOptions<?> options){
return options
.placeholder(R.drawable.hold)
.error(R.drawable.error)
.fallback(R.drawable.fallback);
}
}
使用对比:
GlideApp.with().load()
.placeholder(R.drawable.hold)
.error(R.drawable.error)
.fallback(R.drawable.fallback);
GlideApp.with().load()
.defaultImg()