Glide是一款快速高效的Android图像加载库。Glide支持提取,解码和显示视频静止图像,图像和动画GIF。Glide包含一个灵活的api,允许开发人员插入几乎任何网络堆栈。默认情况下,Glide的使用基于HttpUrlConnection,但也可以使用Google的Volley项目或Square的OkHttp库。
Glide主要关注的是尽可能平滑和快速地滚动任何类型的图像列表,但Glide对于几乎任何需要获取,调整大小和显示远程图像的情况也很有效。
Glide v4 requires Android Ice Cream Sandwich (API level 14) or higher.
需要权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
//从DCIM或图片等本地文件夹加载图像
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
//用于ExternalPreferredCacheDiskCacheFactory在公共SD卡上存储Glide的缓存
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
混淆
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
#if you're targeting any API level less than Android API 27, also include:
```pro
-dontwarn com.bumptech.glide.load.resource.bitmap.VideoDecoder
# for DexGuard only
-keepresourcexmlelements manifest/application/meta-data@value=GlideModule
//gradle导入
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
按上面的步骤集成,就可以使用Glide了。
/**
* Glide v4最基本使用
* placeholder()、error()和fallback()在Glide归类为Placeholders(占位符)
*/
RequestOptions ro1 = new RequestOptions()
.placeholder(Drawable或resourceId)//请求正在进行时显示的Drawable
.error(Drawable或resourceId)//请求出错时显示的Drawable
.fallback(Drawable或resourceId);//请求的URL/模型为null时显示的Drawable(默认情况下,Glide会将null网址/模型视为错误)
Glide.with(this).load(url).apply(ro1).into(ImageView);
常问问题
占位符是否异步加载?
不是。占位符是从主线程上的Android资源加载的。我们通常希望占位符小,并且可以通过系统资源缓存轻松缓存。
转换是否适用于占位符?
不适用。转换仅应用于请求的资源,而不应用于任何占位符。
在应用程序中包含必须在运行时转换的资源是低效的。你几乎总是更好,包括一个与你需要的大小和形状完全相同的资源版本。例如,如果您正在加载循环图像,则可能需要在应用程序中包含循环占位符资源。或者,您也可以考虑使用自定义视图以与转换相同的方式剪切占位符。
在多个视图中使用相同的Drawable作为占位符是否可以?
通常,但并非总是如此。任何非有状态Drawable(如BitmapDrawable)通常都可以一次显示在多个视图中。但是,Stateful Drawable通常不能安全地同时在多个视图中显示,因为多个视图会立即改变状态。对于有状态Drawable,传入资源ID,或者用于newDrawable()
将新副本传递给每个请求。