私はアニメーションに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);
}
}
2 番目の Animator(mTargetScaleAnimSet) の開始前に、end() メソッドを呼び出して AnimatorSet 全体を終了します。しかし、end() メソッドでは AnimatorSet 内のすべての子アニメーターを終了できないことがわかりました。
Q: シーケンシャルでプレイしているすべての子アニメーターはどうすればよいですか?