当Glide加载图片时出现闪烁问题

7

我有一个图像视图列表,其中某些视图将经常使用固定的URL进行更新。通过在URL末尾添加时间戳查询参数。它可以工作,但我发现当它更新时,它也会清除当前内容。是否有任何方法可以防止这种情况发生?

// the one needed to update with timestamp appended
image += "?"+String.valueOf(System.currentTimeMillis());
Glide.with(mContext.getApplicationContext())
        .load(image)
        .error(R.drawable.default_avatar)
        .centerCrop()
        .crossFade()
        .into(((VideoViewHolder) holder).img);

// the others don't need to update
Glide.with(mContext.getApplicationContext())
        .load(image)
        .error(R.drawable.default_avatar)
        .centerCrop()
        .crossFade()
        .into(((VideoViewHolder) holder).img);

请注意,没有时间戳附加的其他内容都是良好的。

所以你的意思是它闪烁而不是交叉淡入淡出? - X3Btel
1
@X3Btel 这是交叉淡入淡出,但这不是我想要的。我不想让它再次从占位符开始。我希望它可以无缝地更新到最新的一个。 - Dayo Choul
我建议首先像不可更新的那样加载所有内容。然后对于需要更新的图像,调用您的方法,但不要使用交叉淡入淡出。 - X3Btel
2个回答

4

试试这个

Glide
.with(context)
.load(filepath)
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.dontAnimate()
.into(new SimpleTarget<Bitmap>() {

        @Override
        public void onResourceReady(Bitmap arg0, GlideAnimation<? super Bitmap> arg1) {
            // TODO Auto-generated method stub
            holder.mItemView.setImageBitmap(arg0);
        }
    });

如果您正在使用Glide 3.x,并希望直接显示图像而无需小的淡入淡出效果,请在Glide请求构建器上调用.dontAnimate()方法: 更多信息请阅读:Glide - 占位符和淡入淡出动画 编码愉快!

1
一样的。有没有办法在不清除当前内容的情况下更新图像? - Dayo Choul
2
尝试使用 skipMemoryCache(false)。它将保留当前缓存中的数据,直到其发生更改。 - Hemant Parmar

-2
如果您正在使用模拟器,则可能会出现此问题。 请尝试使用真实的物理设备或更改模拟器。

哦,真的吗?我不这么认为。 - IntelliJ Amiya
它是一种物理设备。 - Dayo Choul
是的!我经常遇到这个问题。目前我正在处理的项目中,我遇到了很多类似的问题。视图闪烁、菜单闪烁、图像闪烁,尤其是开关。但是在调试后,当我将应用程序安装在我的真实设备(卡车模拟器屏幕)上时,它运行得非常好。 - Abdur Rahman
1
@IntelliJAmiya 不。 - Dayo Choul
1
@IntelliJAmiya 其他没有时间戳的固定项都很好。 - Dayo Choul
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接