Litho 动画示例都是在用户触发事件时开始的。但我需要一个立即开始并无限期持续的动画。换句话说,我遇到了与如何自动运行 Litho 动画相同的问题?但我需要一个针对 Litho 动画的解决方案,而不是基本的 Android 动画。
注意,我问了一个相关的问题如何自动运行 Litho 动画?当我尝试修改 Litho 的一个示例以在没有用户事件的情况下启动动画时。但我现在要问的问题是动画一旦开始如何重复?
Litho 动画示例都是在用户触发事件时开始的。但我需要一个立即开始并无限期持续的动画。换句话说,我遇到了与如何自动运行 Litho 动画相同的问题?但我需要一个针对 Litho 动画的解决方案,而不是基本的 Android 动画。
注意,我问了一个相关的问题如何自动运行 Litho 动画?当我尝试修改 Litho 的一个示例以在没有用户事件的情况下启动动画时。但我现在要问的问题是动画一旦开始如何重复?
为了自动启动 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 机制一起使用,以定期安排工作