android - recyclerView 滚动滞后
问题描述
我有一个recyclerView
匹配父项。在recyclerView
项目中,我有 48 个相关布局和一个背景,它可以毫无问题地滚动。由于我添加lottie animationView
了项目,recyclerView
滚动但有滞后。我尝试更改缓存大小,从窗口分离时暂停动画,压缩背景图像,使用另一个线程,将图像转换为位图,但没有帮助。
我应该尝试绘制视图或类似的东西,还是我可以做其他事情?
解决方案
我的解决方案是使用不同的方法来播放动画。
我的第一个选择是 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);
推荐阅读
- html - 正则表达式在包含所需文本的 html 表中选择一行
- java - 我可以在 Java 的类注释中调用方法吗?
- c++ - iostream 等效于 snprintf(NULL, 0, format_string, args...)
- laravel - Vuejs 组件在页面加载时消失
- c# - 如何将 DateTime 转换为 yyyy-MM-dd 格式?
- postgresql - 如何将十进制列的默认值设置为 0.0
- c# - Xamarin Forms Animations 适用于 iOS 但不适用于 Android
- python - 无法修补用户 DirectoryObjectUnauthorizedAccessException http 500
- sql-server - 将 AWS RDS Microsoft SQL Server 日志推送到 cloudwatch
- python-3.x - 尝试使用 pywebcopy 镜像网页