反向动画集
Reverse AnimatorSet
有没有办法在 Android 上 运行 反向 AnimatorSet
? ValueAnimator
API 确实为单个动画师提供了反向方法,但没有为一组动画师提供反向方法。
如果您的 AnimatorSet
是按顺序播放的,那么您可以使用@blackbelt 提到的方法:
public static AnimatorSet reverseSequentialAnimatorSet(AnimatorSet animatorSet) {
ArrayList<Animator> animators = animatorSet.getChildAnimations();
Collections.reverse(animators);
AnimatorSet reversedAnimatorSet = new AnimatorSet();
reversedAnimatorSet.playSequentially(animators);
reversedAnimatorSet.setDuration(animatorSet.getDuration());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
// getInterpolator() requires API 18
reversedAnimatorSet.setInterpolator(animatorSet.getInterpolator());
}
return reversedAnimatorSet;
}
需要注意的是,这仅适用于简单的顺序动画,因为原始 AnimatorSet
中的任何依赖项设置都将丢失。此外,如果在 AnimatorSet
上使用了插值器,它只会在 API 18 或更新版本上继续使用(根据上述方法,您也可以手动将插值器添加回新的反向动画集)。
AnimatorSet
中的各个动画不会反向播放,如果需要的话,您还必须遍历 AnimatorSet
的动画并设置 ReverseInterpolator
关于每个,请参阅 answer to Android: Reversing an Animation。
您可以从 ValueAnimator.ofFloat(0, 1)
获取初始输入值,并在调用 yourAnimatorSet.start()
之前用 yourAnimator.setFloatValues(1, 0)
切换它们,当您想要反转动画时
reverse() 方法已添加到 API 26:
Plays the AnimatorSet in reverse. If the animation has been seeked to a specific play time using setCurrentPlayTime(long), it will play backwards from the point seeked when reverse was called. Otherwise, then it will start from the end and play backwards. This behavior is only set for the current animation; future playing of the animation will use the default behavior of playing forward.
Note: reverse is not supported for infinite AnimatorSet.
有没有办法在 Android 上 运行 反向 AnimatorSet
? ValueAnimator
API 确实为单个动画师提供了反向方法,但没有为一组动画师提供反向方法。
如果您的 AnimatorSet
是按顺序播放的,那么您可以使用@blackbelt 提到的方法:
public static AnimatorSet reverseSequentialAnimatorSet(AnimatorSet animatorSet) {
ArrayList<Animator> animators = animatorSet.getChildAnimations();
Collections.reverse(animators);
AnimatorSet reversedAnimatorSet = new AnimatorSet();
reversedAnimatorSet.playSequentially(animators);
reversedAnimatorSet.setDuration(animatorSet.getDuration());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
// getInterpolator() requires API 18
reversedAnimatorSet.setInterpolator(animatorSet.getInterpolator());
}
return reversedAnimatorSet;
}
需要注意的是,这仅适用于简单的顺序动画,因为原始 AnimatorSet
中的任何依赖项设置都将丢失。此外,如果在 AnimatorSet
上使用了插值器,它只会在 API 18 或更新版本上继续使用(根据上述方法,您也可以手动将插值器添加回新的反向动画集)。
AnimatorSet
中的各个动画不会反向播放,如果需要的话,您还必须遍历 AnimatorSet
的动画并设置 ReverseInterpolator
关于每个,请参阅 answer to Android: Reversing an Animation。
您可以从 ValueAnimator.ofFloat(0, 1)
获取初始输入值,并在调用 yourAnimatorSet.start()
之前用 yourAnimator.setFloatValues(1, 0)
切换它们,当您想要反转动画时
reverse() 方法已添加到 API 26:
Plays the AnimatorSet in reverse. If the animation has been seeked to a specific play time using setCurrentPlayTime(long), it will play backwards from the point seeked when reverse was called. Otherwise, then it will start from the end and play backwards. This behavior is only set for the current animation; future playing of the animation will use the default behavior of playing forward.
Note: reverse is not supported for infinite AnimatorSet.