M'a*_*der 9 animation android fragment fragmenttransaction fragmentmanager
我正在处理一些片段,但是从一个片段切换到另一个片段时的过渡动画非常滞后,有时甚至会跳过整个动画(我已经读过,有时这是片段性能不佳的结果)。
非常有趣的是,我在该片段中的所有数据获取和计算都是使用设置在计算线程上的协程完全异步完成的。包含数据的数组列表甚至不长或有很多参数。我在 UI 上做的唯一一件事就是在 RecyclerView Adapter 和 notifyDataSetChanged() 上设置最终列表 -> 就是这样!所以我的结论是 ViewHolder 膨胀本身就是导致滞后的原因。ViewHolders 的布局 XML 也非常精简(一个可绘制资源和三个字符串)。
在片段事务方面,我将当前片段替换为 FrameLayout 中的新片段,并使用一组自定义的 XML 对象动画器进行提交。
我已经看到一些答案说我应该将适配器上的项目设置延迟大约 2 秒钟,但是见鬼,最终用户在该片段中导航并在白屏上等待 2 秒钟之前看起来真的很糟糕数据突然出现。我想要一个平滑的 60fps 过渡到新片段,数据已经显示。
这件事在Android上甚至可能吗?我不是苹果迷,但就动画的流畅度和流畅度而言,iOS 设备在这个主题上破坏了 Android 的混乱局面。
我需要任何类型的建议甚至示例来向我展示如何解决此问题。
谢谢!
在添加/替换片段时尝试添加一个 startOffset(如 300 毫秒),片段将从后台预加载,300 毫秒后,应用程序将运行动画,流畅地显示您的片段。
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>
Run Code Online (Sandbox Code Playgroud)