Android: How to prevent lag or animation skip on Fragment transaction when inflating RecyclerView inside?(Android:如何防止在内部膨胀ReccyclerView时,碎片事务出现滞后或动画跳过?)
问题描述
我正在处理一些片断,但是在从一个片断切换到另一个片断时的过渡动画非常滞后,有时甚至会跳过整个动画(我读到这有时是片断性能不佳的结果)。 非常有趣的是,我在该片段中的所有数据获取和计算都是使用在计算线程上设置的协同例程完全异步完成的。并且包含数据的数组列表甚至不长或参数不多。我在UI标题上做的唯一一件事就是在ReccyclerView Adapter上设置最终列表,然后通知DataSetChanged()->仅此而已!因此,我的结论是,ViewHolder通胀本身就是导致滞后的原因。ViewHolders的布局XML也非常简单(一个可绘制的RES和三个字符串)。
在片段事务方面,我在FrameLayout中用新片段替换当前片段,并使用一组定制的XML对象动画工具提交。
我看到一些回答说我应该延迟设置Adapter上的项大约2秒,但见鬼,如果最终用户在该片段中导航并在白屏上等待2秒才突然显示数据,这看起来真的很糟糕。我想要一个平滑的60fps过渡到新的片段,数据已经显示。
这个东西在Android上可能吗?我不是苹果迷,但就动画的流畅度和流畅度而言,iOS设备在这个问题上给Android带来的混乱造成了很大的破坏。
我需要任何类型的建议或示例来向我展示如何解决此问题。
谢谢!
推荐答案
尝试添加startOffset(如300ms)添加/替换片段时,片段将从后台预加载,300ms后,APP将平稳运行动画显示您的片段。
300ms只是一个随机数字,这真的取决于您需要初始化的UI有多重。
希望得到此帮助。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="together">
<alpha
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="400"
android:interpolator="@android:interpolator/accelerate_decelerate"
/>
<translate
android:startOffset="300"
android:fromYDelta="100%"
android:toYDelta="0%"
android:duration="400"
android:interpolator="@android:interpolator/accelerate_decelerate"
/>
</set>
这篇关于Android:如何防止在内部膨胀ReccyclerView时,碎片事务出现滞后或动画跳过?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Android:如何防止在内部膨胀ReccyclerView时,碎片事务出现滞后或动画跳过?


- Android viewpager检测滑动超出范围 2022-01-01
- android 4中的android RadioButton问题 2022-01-01
- MalformedJsonException:在第1行第1列路径中使用JsonReader.setLenient(True)接受格式错误的JSON 2022-01-01
- 在测试浓缩咖啡时,Android设备不会在屏幕上启动活动 2022-01-01
- Android - 我如何找出用户有多少未读电子邮件? 2022-01-01
- Android - 拆分 Drawable 2022-01-01
- 使用自定义动画时在 iOS9 上忽略 edgesForExtendedLayout 2022-01-01
- 用 Swift 实现 UITextFieldDelegate 2022-01-01
- 想使用ViewPager,无法识别android.support.*? 2022-01-01
- 如何检查发送到 Android 应用程序的 Firebase 消息的传递状态? 2022-01-01