本文是在拜读了郭神的Glide系列教程后做的个人笔记,需要学习这方面知识的请点击下方链接。
郭神博客:https://blog.csdn.net/guolin_blog
Glide的with()方法,如果传入的是Activity或者Fragment的实例,那么当这个Activity或Fragment被销毁的时候,图片加载也会停止。如果传入的是ApplicationContext,那么只有当应用程序被杀掉的时候,图片加载才会停止。
基本使用:Glide.with().load().into();
占位图:在load与into中间加上palceholder(占位的图片资源);
硬盘缓存:diskCacheStrategy();有以下四种可选参数。
DiskCacheStrategy.NONE: 表示不缓存任何内容。
DiskCacheStrategy.SOURCE: 表示只缓存原始图片。
DiskCacheStrategy.RESULT: 表示只缓存转换过后的图片(默认选项)。
DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。
禁用内存缓存:skipMemoryCache(true);
异常占位图:error(),出现异常情况导致目标图片加载不了则显示此图片。
Glide自动识别加载静态图或者gif,asBitmap()可以强制加载静态图;asGif()则是加载动态图,若传入的不是gif,则会加载失败。
Glide是自动识别ImageView的大小,因此基本不用我们人为指定,当然也可以使用override(100,100);这样就不去管ImageView的大小。
预加载 downloadOnly(),preload(),都是替换into的,
不过diskCacheStrategy()最好指定为DiskCacheStrategy.SOURCE。
dontTransform()加载图片时不进行自动转换;
override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)指定成原始尺寸。
transform(…)图片变换操作;
fitCenter()按比例充满屏幕;
centerCrop();对原图中心区域裁剪,配合override可指定比例。
自定义变换:自定义一个类继承BitmapTransformation,在重写的方法里进行具体实现,最终将该类实例传入transform里,不过一般都是引用开源库。
glide-transformations,开源库,已有众多常用的自定义变换,可引入项目直接使用。
Glide.with(this)
.load(url)
.bitmapTransform(new BlurTransformation(this), new GrayscaleTransformation(this))
.into(imageView);
导入后可同时进行多种变化。
自定义模块:
自定义模块类,实现GlideModule接口
@GlideModule //4.+使用
public class MyGlideModule implements GlideModule {
//硬盘缓存大小500M
public static final int DISK_CACHE_SIZE = 500 * 1024 * 1024;
@Override
public void applyOptions(Context context, GlideBuilder builder) {
//将加载的图片缓存到SD卡上
builder.setDiskCache(new ExternalCacheDiskCacheFactory(context));
//使用ARGB_8888格式,清晰但开销大
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
}
@Override
public void registerComponents(Context context, Glide glide) {
//替换组件
}
}
在清单文件里声明(4.+的话在上边添加注解即可,无需在此声明)
<application>
<meta-data
android:name="com.example.glidetest.MyGlideModule"
android:value="GlideModule" />
...
</application>
默认配置
setMemoryCache()
用于配置Glide的内存缓存策略,默认配置是LruResourceCache。
setBitmapPool()
用于配置Glide的Bitmap缓存池,默认配置是LruBitmapPool。
setDiskCache()
用于配置Glide的硬盘缓存策略,默认配置是InternalCacheDiskCacheFactory。
setDiskCacheService()
用于配置Glide读取缓存中图片的异步执行器,默认配置是FifoPriorityThreadPoolExecutor,也就是先入先出原则。
setResizeService()
用于配置Glide读取非缓存中图片的异步执行器,默认配置也是FifoPriorityThreadPoolExecutor。
setDecodeFormat()
用于配置Glide加载图片的解码模式,默认配置是RGB_565。
4.+版本
将之前添加在load与into中间的多种方法,定义了一个类RequestOptions来接收,之后传给apply();
引申的工具类
public class GlideUtil {
public static void load(Context context,String url,ImageView imageView,RequestOptions options){
Glide.with(context)
.load(url)
.apply(options)
.into(imageView);
}
}
硬盘缓存也发生一点更改
DiskCacheStrategy.NONE: 表示不缓存任何内容。
DiskCacheStrategy.DATA: 表示只缓存原始图片。
DiskCacheStrategy.RESOURCE: 表示只缓存转换过后的图片。
DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。
DiskCacheStrategy.AUTOMATIC: 表示让Glide根据图片资源智能地选择使用哪一种缓存策略(默认选项)。
4.+ 比之前的3.7的不同
asBitmap()这几个方法在4.+上是放在load()之前的,新增了asFile()和asDrawable();
submit()对应3.7的downloadOnly();
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);
4.+新功能 Generated API
把Glide关键字替换成GlideApp关键字,可以使用3.7一样的用法;
还可以自定义API,仍然是郭神的例子
//添加此注解
@GlideExtension
public class MyGlideExtension {
//必须是private
private MyGlideExtension() {
}
//自定义方法需有此注解,且需要是静态方法,第一个参数必须是RequestOptions,其他可以自定义
@GlideOption
public static void cacheSource(RequestOptions options) {
//对缓存方式进行封装
options.diskCacheStrategy(DiskCacheStrategy.DATA);
}
}