博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gilde刷新图片闪烁和You must not call setTag() on a view Glide is targeting如何解决
阅读量:4280 次
发布时间:2019-05-27

本文共 1598 字,大约阅读时间需要 5 分钟。

问题一:在使用Glide刷新时图片闪烁

在使用Glide加载图片时图片闪烁,并且会出现图片大小忽大忽小的问题,这是我们应该如何解决?

1.关于忽大忽小:其实很大程度上是由于刷新闪烁问题引起的。
刚开始我并不知道这个原因,所以我一定追求固定宽高。解决方法如下:
  •           用Gilde的resize(w,h)或是override(w,h),
  •          又或是在布局xml文件中对ImageView的Height取固定值
         
但是效果并不理想。
2.关于图片闪烁,我们可以为ImageView绑定tag,每次加载是判断tag
if(!path.equals(imageView.getTag())){//解决图片加载不闪烁的问题,可以在加载时候,对于已经加载过的item,  采用比对tag方式判断是否需要重新计算高度                       Glide.with(context)                    .load(path)                    .placeholder(R.drawable.pictures_no)                    .error(R.drawable.pictures_no)                    .into(imageView);            imageView.setTag(path);        }

这样就很好的解决了图片闪烁问题,并且我发现图片忽大忽小的问题也没了

但是在后来的使用中我发现又出现了新的问题。
删除图片时会报错You must not call setTag() on a view Glide is targeting,跟踪源码导致这个问题的就是:
@Overridepublic Request getRequest() {    Object tag = getTag();    Request request = null;    if (tag != null) {        if (tag instanceof Request) {            request = (Request) tag;        } else {            throw new IllegalArgumentException("You must not call setTag() on a view Glide is targeting");        }    }    return request;}
在Glide的into(img)中会用到traget.getRequest()方法。traget即是ImageView,所以会报异常
那该如何解决呢?
很简单在into(img)方法之前加上imageView.setTag(null)就行
if(!path.equals(imageView.getTag())){//解决图片加载不闪烁的问题,可以在加载时候,对于已经加载过的item,  采用比对tag方式判断是否需要重新计算高度            imageView.setTag(null);//需要清空tag,否则报错            Glide.with(context)                    .load(path)                    .placeholder(R.drawable.pictures_no)                    .error(R.drawable.pictures_no)                    .into(imageView);            imageView.setTag(path);        }

转载地址:http://mbfgi.baihongyu.com/

你可能感兴趣的文章
ALSA声卡驱动中的DAPM详解之一:kcontrol
查看>>
ALSA声卡驱动中的DAPM详解之二:widget-具备路径和电源管理信息的kcontrol
查看>>
ALSA声卡驱动中的DAPM详解之三:如何定义各种widget
查看>>
ALSA声卡驱动中的DAPM详解之四:在驱动程序中初始化并注册widget和route
查看>>
ALSA声卡驱动中的DAPM详解之五:建立widget之间的连接关系
查看>>
ALSA声卡驱动中的DAPM详解之六:精髓所在,牵一发而动全身
查看>>
ALSA声卡驱动中的DAPM详解之七:dapm事件机制(dapm event)
查看>>
Android Audio System之一:AudioTrack如何与AudioFlinger交换音频数据
查看>>
Android Audio System之二:AudioFlinger
查看>>
Android Audio System之三:AudioPolicyService和AudioPolicyManager
查看>>
android电池系统
查看>>
android4.x 耳机插拔检测机制
查看>>
Android 4.x耳机插拔检测实现方法
查看>>
android修改开机动画和铃声
查看>>
android audio音量控制流程
查看>>
解密回声消除技术之一(理论篇)
查看>>
解密回声消除技术之二(应用篇)
查看>>
Speex编解码在Android上实现
查看>>
回音消除技术概述
查看>>
speex回音消除
查看>>