0

我正在使用 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 中的所有子 Animator。

问:所有儿童动画师如何按顺序播放?

4

1 回答 1

0

经过一番头脑风暴,我找到了如下解决方案:</p>

首先:

mScaleAnimSet.setStartDelay(3500);

然后:

mTargetAnimSet.playSequentially(mTransAnimSet, mScaleAnimSet);

改成:

mTargetAnimSet.playTogether(mTransAnimSet, mScaleAnimSet );

我认为关键是如果动画没有开始,你就不能结束它。

于 2014-07-06T05:49:42.613 回答