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

Kotlin 复制代码
    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()方法,

Kotlin 复制代码
@Override
public void clear() {
    ...
    if (state == Status.CLEARED) {
        return;
    }
    
    state = Status.CLEARED;

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

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

Kotlin 复制代码
  @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()方法即可解决此类问题:

Kotlin 复制代码
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?) {
                    }
                })
相关推荐
天空之城--6 小时前
Android逆向安全合规接单指南
android·安全
消失的旧时光-19438 小时前
Android 系统层扫盲 09:AMS、ATMS、WMS、PMS 到底分别管什么?
android·wms·pms·ams·aosp·atms
Godikov8 小时前
Android 系统级设备应用踩坑实录:sharedUserId 签名、SDK 授权失败 -4、开机自启与 U 盘 OTA 升级
android
IT毕设实战小研11 小时前
基于大数据的国内主要农作物产量趋势分析与可视化
android·java·大数据·django·课程设计
企业数字化笔记12 小时前
固定资产历史数据怎么导入系统?Excel模板、字段映射和数据校验
android·java·数据库·后端
龙之叶12 小时前
Android出海系列-GMS认证介绍
android
潮族大Z13 小时前
Android性能优化:启动、内存、卡顿的一站式排查手册
android
事圆则缓14 小时前
从suspend字节码到 Retrofit 协程桥:挂起函数识别与恢复
android·retrofit
杉氧15 小时前
RN 性能调优指南:重渲染(Re-renders)控制与长列表(FlatList)优化
android·前端·react native
Coffeeee15 小时前
claude-video 一个让你的Agent拥有看视频能力的Skill
android·人工智能·aigc