返回

划重点!AnimatorSet 动画不执行时的秘籍

Android

动画序列执行顺序的意外变化:Target SDK 29 及以上版本使用 AnimatorSet

概述

升级到 Android Target SDK 29 或更高版本时,使用 AnimatorSet 执行动画时可能会遇到一个意想不到的问题:动画的执行顺序发生了变化。本文将探讨这一现象背后的原因并提供解决方法。

问题

在 Android 9.0 之前的版本中,AnimatorSet.playSequentially() 方法确保了动画按顺序执行。但是,在 Android 9.0 及以上版本中,AnimatorSet 的执行顺序发生了变化。使用 playSequentially() 不再保证动画按指定的顺序执行。

原因

Android 9.0 中对 AnimatorSet 进行了一项更改,该更改影响了动画的执行顺序。现在,动画按其开始时间的顺序执行,而不是按添加到 AnimatorSet 的顺序执行。

解决方法

为了确保动画按正确的顺序执行,请使用 playTogether() 方法而不是 playSequentially() 方法。playTogether() 将所有动画同时开始,从而保持指定的执行顺序。

AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(animator1, animator2);

示例

考虑以下代码示例:

AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playSequentially(animator1, animator2);
animatorSet.setDuration(1000);
animatorSet.start();

在 Android 9.0 之前的版本中,此代码会按顺序执行 animator1,然后执行 animator2。但在 Android 9.0 及以上版本中,animator2 将在 animator1 之前开始执行。要修复此问题,请使用 playTogether() 方法:

AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(animator1, animator2);
animatorSet.setDuration(1000);
animatorSet.start();

其他信息

有关 AnimatorSet 的更多信息,请参阅以下资源:

常见问题解答

1. 为什么动画执行顺序会发生变化?

动画执行顺序的变化是由于 Android 9.0 中对 AnimatorSet 的更改。现在,动画按其开始时间的顺序执行,而不是按添加到 AnimatorSet 的顺序执行。

2. 我如何修复动画不按正确顺序执行的问题?

要修复此问题,请使用 playTogether() 方法而不是 playSequentially() 方法。playTogether() 将所有动画同时开始,从而保持指定的执行顺序。

3. 除了使用 playTogether() 方法之外,还有其他方法可以控制动画的执行顺序吗?

可以,您还可以使用 with() 方法将动画按顺序链接在一起。这将创建一种依赖关系,其中一个动画在另一个动画完成之前无法开始。

4. playTogether()playSequentially() 之间有什么区别?

playTogether() 将所有动画同时开始,而 playSequentially() 将动画按顺序执行。playSequentially() 的行为类似于 with() 方法,但后者提供对动画依赖关系更精细的控制。

5. 如何确保动画在不同设备上按相同顺序执行?

要确保动画在不同设备上按相同顺序执行,请使用 setDuration() 方法设置动画的持续时间。这将使动画在所有设备上以相同的速度执行,从而保持执行顺序一致。