当前位置: 首页 > news >正文

Android中使用Glide加载图片闪烁问题

    Glide.with(vh.image)
                .setDefaultRequestOptions(requestOptions)
                .load(mImages[pos])
                .fitCenter()
                .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
                .into(vh.image)

当使用Glide如上面的方式加载图片时,尤其是当图片资源比较大时,在更新图片资源(即将图a换成图b)时可能会出现ImageView短暂显示为透明状态,给人以闪烁的感觉,很不友好。

原因在于Glide会将我们传入的ImageView包装成ImageViewTarget对象,当Glide为Imageview重新加载新图片前会先调用com.bumptech.glide.request.SingleRequest的clear()方法,

@Override
public void clear() {
    ...
    if (state == Status.CLEARED) {
        return;
    }
    
    state = Status.CLEARED;

    if (target != null) {
        target.onLoadCleared(getPlaceholderDrawable());
    }
    ...
}

这里会调用ImageViewTarget的onLoadCleared()方法,

  @Override
  public void onLoadCleared(@Nullable Drawable placeholder) {
    super.onLoadCleared(placeholder);
    if (animatable != null) {
      animatable.stop();
    }
    setResourceInternal(null);
    setDrawable(placeholder);
  }

如果我们使用Glide时没有设置placeholder占位图,这里的placeholder则为null,这是导致ImageView有短暂透明状态的直接原因。

此时,我们只要重写onLoadCleared()方法即可解决此类问题:

Glide.with(vh.image)           
                .asBitmap()
                .load(image)
                .fitCenter()
                .override(com.bumptech.glide.request.target.Target.SIZE_ORIGINAL, com.bumptech.glide.request.target.Target.SIZE_ORIGINAL)
                .into(object : CustomTarget<Bitmap?>() {
                    override fun onResourceReady(
                        resource: Bitmap,
                        @Nullable transition: Transition<in Bitmap?>?
                    ) {
                        vh.image.setImageBitmap(resource) // 直接设置 Bitmap,避免清空 ImageView
                    }

                    override fun onLoadCleared(@Nullable placeholder: Drawable?) {
                    }
                })

相关文章:

  • Transformer原理硬核解析:Self-Attention与位置编码
  • 算法优选系列(1.双指针_下)
  • Python Flask 构建REST API 简介
  • Linux 进程信号
  • 文件包含漏洞第一关
  • llvm数据流分析
  • 【数据结构】2算法及分析
  • Android 粘包与丢包处理工具类:支持多种粘包策略的 Helper 实现
  • 灰度发布和方法灰度实践探索
  • 【一起学Rust | Tauri2.0框架】基于 Rust 与 Tauri 2.0 框架实现软件开机自启
  • 方案精读:IBM方法论-IT规划方法论
  • centos linux安装mysql8 重置密码 远程连接
  • ctf-web: Gopher伪协议利用 -- GHCTF Goph3rrr
  • python---pickle库
  • 关于sqlalchemy的ORM的使用
  • 物联网商业模式
  • Java算术运算符与算术表达式
  • 第一章:大模型的起源与发展
  • 二、重学C++—C语言核心
  • JavaWeb——Mybatis、JDBC、数据库连接池、lombok
  • 竞彩湃|巴萨客场淘汰国际米兰,巴黎双杀阿森纳
  • 五一假期上海两大机场客流量超193万人次,创历年同期最高
  • 一季度全国30强城市出炉:谁能更进一步?谁掉队了?
  • 广东省联社:积极推动改制组建农商联合银行工作
  • 国防部新闻发言人就日本民用飞机侵闯中国钓鱼岛领空答记者问
  • 巴基斯坦宣布禁止印度船只入港