目前android开发中常用的图片框架主要集中在ImageLoader,Picasso,Fresco,Glide,各框架之间的优劣网上有很多分析文章,在此不做单独分析,本文主要介绍在开发过程中使用Glide的时出现的问题,以及对应的解决方法。有关Glide的相关介绍推荐郭神的文章——Android图片加载框架最全解析
1.加载图片变绿
加载图片变绿,主要原因是图片压缩所致,使用webp显示图片时出现可能性也较高
解决方法:
加载原图
在使用Glide加载图片时,设置.diskCacheStrategy(DiskCacheStrategy.SOURCE)方法,加载原图
Glide.with(context).load(url).diskCacheStrategy(DiskCacheStrategy.SOURCE).into(iv_img);
设置Glide加载图片的编码格式
Glide默认的bitmap编码格式为RGB565,我们可以通过修改默认的编码格式,来实现加载高清图片
首先,创建GlideConfiguration实现GlideModule,修改Glide的编码格式为ARGB_8888
public class GlideConfiguration implements GlideModule{
@Override
public void applyOptions(Context context, GlideBuilder builder) {
builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
}
@Override
public void registerComponents(Context context, Glide glide) {
}
}
然后在AndroidManifext.xml文件中添加如下设置即可
<meta-data
android:name="com.xxx.xxx.GlideConfiguration"
android:value="GlideModule"/>
2.与TouchImageView混合使用不显示图像
当我们使用开源缩放图片框架TouchImageView的时候,引入Glide导致图片不显示问题,这个问题在Glide的Issue#135上有说明,具体修改方法如下:
Glide.with(context).load(url).asBitmap().into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
yourImageView.setImageBitmap(resource);
}
});
3.混淆没有添加添加导致Crash
在引入Glide的时候,如果使用了混淆,而没有配置相应的Glide混淆内容,会导致java.lang.IllegalArgumentException: Unable to find GlideModule to find GlideModule implementation异常
解决方法是添加混淆文件,同时需要注意的是,如果单独配置了GlideModule,实现了GlideModule接口的类不能混淆,因为manifest中指明了包名+类名的,混淆了就找不到了
#Glide其他混淆信息 …
-keep public class * implements com.bumptech.glide.module.GlideModule
后续遇到的问题,会持续在此记录,有不同的问题欢迎指正。