Как завершить AnimatorSet с помощью nineoldandroid?

Я использую nineoldandroid для анимации.

Мои коды следующие:

Button mTarget;
Animator mTargetAnim;
AnimatorSet mTargetScaleAnimSet;

private void createAnimation() {
    if (mTargetAnim == null) {
        ObjectAnimator yAnim = ObjectAnimator.ofFloat(mTarget, "y",
                mTarget.getY(), mTarget.getY() + 500).setDuration(3500);
        yAnim.setRepeatCount(0);
        yAnim.setRepeatMode(ValueAnimator.REVERSE);
        yAnim.setInterpolator(new AccelerateInterpolator(2f));
        yAnim.addListener(this);

        ObjectAnimator xAnim = ObjectAnimator.ofFloat(mTarget, "x",
                mTarget.getX(), mTarget.getX() + 500).setDuration(3500);
        xAnim.setStartDelay(0);
        xAnim.setRepeatCount(0);
        xAnim.setRepeatMode(ValueAnimator.REVERSE);
        xAnim.setInterpolator(new AccelerateInterpolator(2f));
        // the first AnimatorSet
        AnimatorSet xyAnimSet = new AnimatorSet();
        xyAnimSet.playTogether(yAnim, xAnim);

        mTargetScaleAnimSet = new AnimatorSet();
        ObjectAnimator scaleXAnim = ObjectAnimator.ofFloat(mTarget,
                "scaleX", 1f, 0f, 0.2f, 0f);
        ObjectAnimator scaleYAnim = ObjectAnimator.ofFloat(mTarget,
                "scaleY", 1f, 0f, 0.2f, 0f);
        mTargetScaleAnimSet.playTogether(scaleXAnim,
                scaleYAnim);
        mTargetScaleAnimSet.setDuration(3000);
        mTargetScaleAnimSet.addListener(this);


        mTargetAnim = new AnimatorSet();
        ((AnimatorSet) mTargetAnim).playSequentially(xyAnimSet, mTargetScaleAnimSet);

        mTargetAnim.addListener(this);
    }
}

Перед началом второго Animator(mTargetScaleAnimSet) я вызываю метод end() для завершения всего AnimatorSet. Однако я обнаружил, что метод end() не может завершить все дочерние аниматоры в наборе AnimatorSet.

Q: Как все детские аниматоры играют последовательно?

1 ответ

После некоторого мозгового штурма я нашел решение следующим образом:

Во-первых:

mScaleAnimSet.setStartDelay(3500);

Затем:

mTargetAnimSet.playSequentially(mTransAnimSet, mScaleAnimSet);

изменить на:

mTargetAnimSet.playTogether(mTransAnimSet, mScaleAnimSet );

Я думаю, что ключ в том, что если анимация не запускается, вы не можете закончить ее.

Другие вопросы по тегам