1

Litho 动画示例都是在用户触发事件时开始的。但我需要一个立即开始并无限期持续的动画。换句话说,我遇到了与如何自动运行 Litho 动画相同的问题?但我需要一个针对 Litho 动画的解决方案,而不是基本的 Android 动画。

注意,我问了一个相关的问题如何自动运行 Litho 动画?当我尝试修改 Litho 的一个示例以在没有用户事件的情况下启动动画时。但我现在要问的问题是动画一旦开始如何重复?

4

1 回答 1

2

为了自动启动 Litho 动画并无限期重复,我修改了RTAnimationComponentSpec通过启动TimerTask

@OnCreateInitialState
static void createInitialState(
        ComponentContext c) {
    startRepeatingAnimation(c);
}

static void startRepeatingAnimation(final ComponentContext c) {
    Log.e(TAG, "Repeat animation handler: about to scheduleAtFixedRate");
    TimerTask animateRepeat = new java.util.TimerTask() {
        public void run() {
            try {
                Log.e(TAG, "Repeat animation handler: about to updateStateAsync");
                RTAnimationComponent.updateStateAsync(c);
            } catch (Exception e) {
                Log.e(TAG, "Repeat animation handler: exception while animating: [" + e + "]");
            }
        }
    };
    new java.util.Timer().scheduleAtFixedRate(animateRepeat, 0, FADE_IN_OUT_DURATION + FADE_IN_DELAY + FADE_IN_STAGGER_DELAY);
}

private static final String TAG = "RTComponentSpec";

我不确定这是否有效createInitialState()。根据文档,它是“为状态设置初始值”。对于状态,Litho 表示标记为 @State 的变量。不过,非正式地,动画是状态的一部分,并且TimerTask确实需要启动。从语义上讲,初始化TimerTask似乎属于创建初始状态。

根据经验,日志显示了我想要的。初始日志消息“重复动画处理程序:即将 scheduleAtFixedRate”出现一次,随后出现“重复动画处理程序:即将 updateStateAsync”的周期性实例。

我想该解决方案还可以与其他 Android 机制一起使用,以定期安排工作

于 2019-05-03T21:14:33.683 回答