反向AnimatorSet

时间:2015-10-08 20:28:48

标签: android objectanimator

有没有办法在Android上反向运行AnimatorSetValueAnimator API确实为各个动画师提供了反向方法,但没有为一组动画师提供反向方法。

3 个答案:

答案 0 :(得分:4)

如果你的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每个,请参阅answerAndroid: Reversing an Animation

答案 1 :(得分:1)

您可以从ValueAnimator.ofFloat(0, 1)获取初始输入值,并在想要撤消动画时调用yourAnimator.setFloatValues(1, 0)之前使用yourAnimatorSet.start()切换它们

答案 2 :(得分:1)

API 26中添加了reverse()方法:

  

反向播放AnimatorSet。如果使用setCurrentPlayTime(long)将动画搜索到特定的播放时间,则它将从调用反向时所寻找的点向后播放。否则,它将从结束开始并向后播放。仅对当前动画设置此行为;未来播放动画将使用前进的默认行为。

     

注意:无限AnimatorSet不支持反向。