使用glide加载图片失败后,设置imageView ImageDrawable或者Batmip无效
如标题,一个小需求在监听Glide图片加载失败后,直接设置imageView为固定背景,代码如下所示:
Glide.with(ivHead).load(new GlideUrl(headUrl, headers))
.addListener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#57BAB3"));
ivHead.setImageDrawable(colorDrawable);
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
if (tvHead != null) {
tvHead.setVisibility(View.GONE);
}
return false;
}
}).into(ivHead);
但是运行发现没效果,最后设置的是透明的。百思不得其解。后来又直接使用设置batmip等设置均不行。于是猜测,是不是onLoadFailed设置之后,gilde又重新设置了一边。
最后直接查看glide git说明文档,发现 onLoadFailed 之后返回值 如果不设置为true的话 该事件还会继续向下传递(类似于事件分发)。最终会执行,glide的error去设置默认的加载失败图片。
综上 : 只需要return true 就可以了
代码如下:
Glide.with(ivHead).load(new GlideUrl(headUrl, headers))
.addListener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#57BAB3"));
ivHead.setImageDrawable(colorDrawable);
//注意 此处设置为true 消化掉该事件 否则会走到 error 重新给imageview设置系统默认的错误图 导致上面设置无效
return true;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
if (tvHead != null) {
tvHead.setVisibility(View.GONE);
}
return false;
}
}).into(ivHead);
虽然比较简单,但还是记录一下。。。希望可以帮到茫然的攻城狮。