AnimatorSet
открытый класс, который расширяет класс Animator
, предоставляет механизм для группирования анимаций так, чтобы они выполнялись по отношению друг к другу. Вы можете настроить анимацию для одновременного воспроизведения , последовательно или после указанной задержки .
Вот как должен выглядеть ваш код :
AnimatorSet bouncer = new AnimatorSet();
bouncer.play(bounceAnim).before(squashAnim1);
// THESE FOUR ANIMATIONS PLAY SIMULTANEOUSLY
bouncer.play(squashAnim1).with(squashAnim2);
bouncer.play(squashAnim1).with(stretchAnim1);
bouncer.play(squashAnim1).with(stretchAnim2);
bouncer.play(bounceBackAnim).after(stretchAnim2);
ValueAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);
fadeAnim.setDuration(250);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.play(bouncer).before(fadeAnim);
animatorSet.start();
В этом коде squashAnim1
клип воспроизводится одновременно с squashAnim2
, stretchAnim1
и stretchAnim2
.
И этот пример объясняет, как это работает: мы настроили AnimatorSet
для игры:
anim1
и anim2
одновременно,
anim3
, чтобы играть, когда anim2
заканчивается,
и anim4
, чтобы играть, когда anim3
заканчивается:
AnimatorSet clips = new AnimatorSet();
clips.play(anim1).with(anim2);
clips.play(anim2).before(anim3);
clips.play(anim4).after(anim3);
Также вы можете использовать Animation listeners
. Они могут слушать важные события во время анимации. Вот код, как это выглядит:
ValueAnimator fadeAnim = ObjectAnimator.ofFloat(newBall, "alpha", 1f, 0f);
fadeAnim.setDuration(250);
fadeAnim.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator animation) {
balls.remove(((ObjectAnimator)animation).getTarget());
}
}
Надеюсь, это поможет.