【发布时间】: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