有没有办法在安卓系统上反向运行AnimatorSet
?ValueAnimator
API确实为单独的动画师提供了相反的方法,但没有提供给一组动画师。
发布于 2015-10-31 04:26:40
如果您的AnimatorSet
是按顺序播放的,那么您可以使用@黑带中提到的方法:
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
,参见回答 to Android:逆转动画。
发布于 2016-05-27 12:40:38
当您想要反转动画时,您可以从(即ValueAnimator.ofFloat(0, 1)
)获取初始输入值,并在调用yourAnimatorSet.start()
之前用yourAnimator.setFloatValues(1, 0)
切换它们。
发布于 2018-06-06 13:49:27
在API 26中添加了反向()方法:
反向播放AnimatorSet。如果动画已经使用setCurrentPlayTime(long)查找到特定的播放时间,它将从调用反向时开始向后播放。否则,它将从结尾开始并向后播放。此行为仅针对当前动画设置;未来动画的播放将使用默认的向前播放行为。 注意:无限大的AnimatorSet不支持反向。
https://stackoverflow.com/questions/33025396
复制相似问题