首页 > 解决方案 > recyclerView 滚动滞后

问题描述

我有一个recyclerView匹配父项。在recyclerView项目中,我有 48 个相关布局和一个背景,它可以毫无问题地滚动。由于我添加lottie animationView了项目,recyclerView滚动但有滞后。我尝试更改缓存大小,从窗口分离时暂停动画,压缩背景图像,使用另一个线程,将图像转换为位图,但没有帮助。

我应该尝试绘制视图或类似的东西,还是我可以做其他事情?

标签: androidandroid-recyclerviewlottie

解决方案


我的解决方案是使用不同的方法来播放动画。

我的第一个选择是 gif,但 gif 具有透明度,如果您的动画具有透明部分,则该动画有一个白色边框,使用起来非常糟糕。

另一种方法是使用 apng;apng 是 png 的动画版本,它解决了透明度的问题,但是在 recyclerView 中它有问题,比如当你向上或向下滚动 recyclerView 时,动画会离开屏幕,它会停止,你应该在任何时候设置动画它附着在窗户上,它会降低性能。

这个问题的最终解决方案是 Webp。Webp 是由 google 创建的一种格式,您可以在 Android 中通过 Fresco 库使用它,并使用 webp 动画图像。该库没有透明度问题,性能非常高,实际上动画尺寸比 Lottie 动画小!

这是我调用 Fresco 库的代码:

 DraweeController controller = Fresco.newDraweeControllerBuilder()
            .setUri(yourUri)
            .setAutoPlayAnimations(true)
            .build();

并轻松将控制器设置为 SimpleDraweeView:

simpleDraweeView.setController(controller);

推荐阅读