【问题标题】:Gif blinking in RecyclerView using Fresco使用 Fresco 在 RecyclerView 中闪烁的 Gif
【发布时间】:2016-04-08 16:37:39
【问题描述】:

我使用 Fresco 在 Recyclerview 中加载 gif。

这是我的 kotlin 代码:

fun loadResizeImage(uri: Uri, view: SimpleDraweeView, width: Int, height: Int) {
    val request = ImageRequestBuilder.newBuilderWithSource(uri)
            .setResizeOptions(ResizeOptions(width, height)).build()

val controller = Fresco.newDraweeControllerBuilder()
        .setOldController(view.controller)
        .setImageRequest(request)
        .build()
view.controller = controller

我不播放 gif,我只是将其加载为静态图像。但是当我调用notifydatasetchanged 时,gif 会闪烁。 我已将supportsChangeAnimations 设置为false,并且只有gif 闪烁。谁能帮帮我?

【问题讨论】:

  • 你正在重置控制器。如果控制器 uri 没有改变,你能避免这样做吗?这应该可以防止闪烁。
  • 我可以将uri设置为视图的标签。如果标签等于uri,我只是不做块中的事情吗?
  • 我试过这个,但效果不好。当我调用notifydatasetchange时,我发现标签与uri不同
  • 对不起。我刚刚了解您的情况。所以 notifyDatasetChanged 会触发一个完整的重绘。无论之前是否绘制过项目。这将在屏幕中带来闪光。即使加载正常的图像也会发生这种情况使用壁画(不一定是gif),所以使用notifyItemChanged会是更好的解决方案
  • 是的。我已经完成了它并且效果很好。notifyDataSetChanged 将调用 onCreateVIewHolder() 它将创建新视图并且我为视图设置的标签消失了。但是 notifyItemChanged 将保留项目这个职位的身份,所以标签不会被清除。

标签: android-recyclerview gif fresco


【解决方案1】:

我的解决方案是将标签设置为视图,如果标签等于 uri,我将不会重新加载图像。但是我发现当我调用 notifyDataSetChange 时,我设置给视图的标签发生了变化。但是当我调用 notifyItemChanged 时,它没有。我不知道标签为什么会改变(我没有滚动 RecyclerView)。

【讨论】:

  • 你修好了。??我也面临同样的问题..如何设置标签..??帮帮我
猜你喜欢
  • 2019-11-30
  • 1970-01-01
  • 2015-10-28
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
  • 1970-01-01
相关资源
最近更新 更多