划重点!AnimatorSet 动画不执行时的秘籍
2023-02-08 16:30:45
动画序列执行顺序的意外变化: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
的更多信息,请参阅以下资源:
- 官方文档:https://developer.android.com/reference/android/animation/AnimatorSet
- 示例代码:https://github.com/googlesamples/android-animations/tree/master/app/src/main/java/com/example/android/animations
- 培训课程:https://www.coursera.org/specializations/android-animations
常见问题解答
1. 为什么动画执行顺序会发生变化?
动画执行顺序的变化是由于 Android 9.0 中对 AnimatorSet
的更改。现在,动画按其开始时间的顺序执行,而不是按添加到 AnimatorSet
的顺序执行。
2. 我如何修复动画不按正确顺序执行的问题?
要修复此问题,请使用 playTogether()
方法而不是 playSequentially()
方法。playTogether()
将所有动画同时开始,从而保持指定的执行顺序。
3. 除了使用 playTogether()
方法之外,还有其他方法可以控制动画的执行顺序吗?
可以,您还可以使用 with()
方法将动画按顺序链接在一起。这将创建一种依赖关系,其中一个动画在另一个动画完成之前无法开始。
4. playTogether()
和 playSequentially()
之间有什么区别?
playTogether()
将所有动画同时开始,而 playSequentially()
将动画按顺序执行。playSequentially()
的行为类似于 with()
方法,但后者提供对动画依赖关系更精细的控制。
5. 如何确保动画在不同设备上按相同顺序执行?
要确保动画在不同设备上按相同顺序执行,请使用 setDuration()
方法设置动画的持续时间。这将使动画在所有设备上以相同的速度执行,从而保持执行顺序一致。