Glide在4.0之后,我们使用的时候需要使用GlideApp这种调用方式,或者优化图片加载内存是会出现设置图片的格式为565来降低图片内存的占用。则可以使用设置全局Glide配置。
第一种,直接在app的主项目中使用:
在gradle中添加依赖:
implementation 'com.github.bumptech.glide:glide:4.11.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
implementation 'jp.wasabeef:glide-transformations:4.3.0'
正常简单快捷使用 :
Glide.with(mContext)
.load(childNode.get(position).getPicture())
.placeholder(R.color.colorPlaceholderColor)
.error(R.mipmap.load_error)
.apply(RequestOptions.bitmapTransform(new RoundedCornersTransformation(7,0)))
.into(imageView);
倘若需要设置全局Glide 配置 比如设置缓存图片大小,设置图片格式则如下:
1、(在主项目包)下新建 CouponModule,extends AppGlideModule:
@GlideModule
public class CouponModule extends AppGlideModule {
@Override
public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
MemorySizeCalculator calculator = new MemorySizeCalculator.Builder(BasicApplication.getInstance()).build();
int defaultMemoryCacheSize = calculator.getMemoryCacheSize();
int defaultBitmapPoolSize = calculator.getBitmapPoolSize();
int defaultArrayPoolSize = calculator.getArrayPoolSizeInBytes();
builder.setDefaultRequestOptions(
new RequestOptions()
.format(DecodeFormat.PREFER_RGB_565));
builder.setMemoryCache(new LruResourceCache(defaultMemoryCacheSize/2));
builder.setBitmapPool(new LruBitmapPool(defaultBitmapPoolSize/2));
builder.setArrayPool(new LruArrayPool(defaultArrayPoolSize/2));
}
}
里面的方法可以不做任何处理。
2、然后再清单文件中配置 (注: studio 4.0以上可以省略此处配置)
<meta-data android:name="com.qindian.qdvideo.glide.CouponModule"
android:value="AppGlideModule"/>
配置完成
配置后使用
GlideApp.with(imageView).load(ConstantUtils.mBaseImgUrl.concat(childNode.get(position).getPicture()))
.placeholder(R.color.colorPlaceholderColor)
.error(R.mipmap.load_error)
.into(imageView);
注意,此时使用的是GlideApp 而不是Glide.其他方法调用依旧。
在全局设置中将图片质量设置为565,如果遇到显示gif文件的时候,会出现gif图片周边出现黑框的问题,需要在加载图片时候,单独针对gif结尾的url将图片质量改回8888
RequestOptions options = new RequestOptions()
.centerCrop()
.placeholder(R.drawable.ic_refresh_loading)
.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.error(R.drawable.ic_refresh_bad_net);
if(!TextUtils.isEmpty(url) && url.endsWith(".gif")) {
options.format(DecodeFormat.PREFER_ARGB_8888);
}
GlideApp.with(context)
.load(url)
.apply(options)
.into(imageView);
写在最后
如果按如上配置未生成GlideApp,则按一下查找问题
1、没有在继承AppGlideMoudle的类上添加@GlideModule 注解(类是final,这似乎并不是必要的)
2、没有添加注解的相关依赖库:
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
3、自定义的类没有在应用包名之下:
官网是这么说的在你的应用程序里面必须包含一个AppGlideModule的实现,再仔细看下面package com.example.myapp, 注意这个类的存放位置一定是在你程序包名下面,不能在任何一个二级包里面。至于MyAppGlideModule命名可以随便命名。
4、还有一点,添加的依赖必须是在app中的build.gradle的文件中,即这两行依赖必须放在和自定义的类同一个模块中。
最后 Rebuild Project .
我遇到的问题是 第三条 自定义的类没有放在应用包名之下,导致没有GlideApp 生成。
写在最后 以上方式目的是节省重复代码。设置图片质量565减少图片加载所耗内存。