一、Glide注意问题
Glide在项目开发中是我们经常用到的图片加载框架,他加载图片平滑,速度快,使用方法简单,可以设置缓存;但是在使用过程中仍然会有许多需要我们注意的点,以下都是我在开发中遇到的问题总结:
1、Glide加载背景变绿
Glide在加载满屏图片的时候背景被图片全部填充,但是Glide在加载纯净图片时,背景会变绿,这也是在项目中偶然遇到的问题,那么如何解决呢,原来Glide早就提供了相应的方法来处理这个问题,方法如下:
Glide.with(context) .load(url) .diskCacheStrategy(DiskCacheStrategy.SOURCE) .into(imageview);
2、Glide缓存
Glide加载默认有缓存,当我们需要频繁的给ImageView添加背景的时候,如果不添加设置,第二次设置的图片通常不能把第一次的图片覆盖,这就是 因为Glide加载默认缓存的问题;
/**
* Glide加载图片默认跳过内存缓存
*/
public static void loadImageSkipMemory(Context context, String url, ImageView view, int err) {
Glide.with(context).load(url).error(err).skipMemoryCache(true).into(view);
}
/**
* Glide加载图片去除磁盘缓存
*/
public static void loadImageDiskMemory(Context context, String url, ImageView view, int err) {
Glide.with(context).load(url).error(err).diskCacheStrategy(DiskCacheStrategy.NONE).into(view);
}
//Glide添加全尺寸缓存
Glide.with(this)
.load("http://nuuneoi.com/uploads/source/playstore/cover.jpg")
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(ivImgGlide);
/**
* Glide加载图片清除磁盘缓存
*/
public static void clearImageDiskMemory(Context context) {
Glide.get(context).clearDiskCache();
}
/**
* Glide加载图片清除内存缓存
*/
public static void clearImageSkipMemory(Context context) {
Glide.get(context).clearMemory();
}
Glide加载图片的缓存策略
策略解说:
all:缓存源资源和转换后的资源
none:不作任何磁盘缓存
source:缓存源资源
result:缓存转换后的资源
3、Glide加载图片的优势
(1) Glide加载图片的with();方法,可以传Context 和Activity,Fragment,推荐用Activity或者Fragment,这样在图片加载的时候是和Activity或Fragment的生命周期相绑定的,在onResume();方法调用的时候可以自动加载,在onPasue();方法调用的时候停止加载;
(2) Glide加载图片默认是加载RGB_565 而Picasso加载图片是默认加载ARGB8888,RGB_565比ARGB8888图片占用的内存小,所以在加载速度上Glide远高于Picasso;
(3)Glide默认有添加内存缓存,所以可以减轻服务器压力,减少网络请求次数,Glide缓存默认缓存当前ImageView控件大小相同的图片,而Picasso是缓存全尺寸的图片;
(4)Glide加载图片load();方法既可以加载本地图片又可以加载网络图片,可加载的类型有:
load(Uri uri),load(File file),load(Integer resourceId),load(URL url),load(byte[] model), load(T model),loadFromMediaStore(Uri uri)。
当然Picasso也可以设置图片加载的大小
Picasso.with(this)
.load("http://nuuneoi.com/uploads/source/playstore/cover.jpg")
.resize(768, 432)
.into(ivImgPicasso);
4、Glide加载动画
Glide不仅可以加载静态图片而且可以加载GIF动画,不设置asGif 只要图片URL是动画,那么就会自动加载,但是如果设置了asGif那么URL就必须是动画资源,不然会报错具体的方法:
/**
* Glide加载GIF动画图
*/
public static void loadGif(Context context, String url, ImageView view, int err) {
Glide.with(context).load(url).asGif().error(err).skipMemoryCache(true).into(view);
}
Glide加载动画默认是循环播放的,那么如何控制加载动画的次数呢,我们可以通过GlideDrawableImageViewTarget来控制动画加载的次数,参数二就是;
Glide.with(this).load(url).into(new GlideDrawableImageViewTarget(iv, 1));
Glide加载Animation动画
Glide.with(this).load(imageUrl).animate(R.anim.item_alpha_in).into(imageView);
5、Glide加载失败
Glide加载图片提供了两种占位图,一种是加载中,一种是加载失败;
Glide.with(this).load(imageUrl).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(imageView);
6、Glide加载缩略图
Glide.with(this).load(imageUrl).thumbnail(0.1f).into(imageView);
7、Glide加载动态转换图
Glide.with(context).load(url).asGif().error(err).centerCrop().skipMemoryCache(true).into(view);
8、Glide 加载添加监听
好处:设置监听的用处 可以用于监控请求发生错误来源,以及图片来源 是内存还是磁盘
Glide.with(this).load(imageUrl).listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
//imageView.setImageDrawable(resource);
return false;
}
}).into(imageView);
二、Picasso加载图片
Picasso加载图片默认加载ARGB8888的图片,像素高,适合加载查看详细图片的方式;
Picasso.with(this)
.load("http://nuuneoi.com/uploads/source/playstore/cover.jpg")
.into(ivImgPicasso);
Picasso提供了两种占位的方式:
Picasso.with(context)
.load(url)
.placeholder(R.drawable.user_placeholder)//加载中
.error(R.drawable.user_placeholder_error)//加载失败
.into(imageView);