Как завершить 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 );
Я думаю, что ключ в том, что если анимация не запускается, вы не можете закончить ее.