Android:如何防止在内部膨胀ReccyclerView时,碎片事务出现滞后或动画跳过? [英] Android: How to prevent lag or animation skip on Fragment transaction when inflating RecyclerView inside?

查看:46
本文介绍了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时,碎片事务出现滞后或动画跳过?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆