ObjectAnimator 动画后 恢复初始状态

位移后 恢复状态:mMiddleAvatar.setTranslationX(0);

改变透明度之后恢复:mMiddleAvatar.setAlpha(1.0f);

旋转后恢复:mMiddleAvatar.setRotation(0);

缩放后恢复:

mMiddleAvatar.setScaleX(1.0f);
mMiddleAvatar.setScaleY(1.0f);

取消 AnimatorSet 动画:

if (mLastAnimatorSet != null) {
    mLastAnimatorSet.cancel();
}
这种取消会走 onAnimationEnd 回调

所以自定义一个  AnimatorListenerAdapter

public abstract class CancelAnimatorListenerAdapter extends AnimatorListenerAdapter {
    private boolean mCanceled = false;

    @Override
    public void onAnimationCancel(Animator animation) {
        super.onAnimationCancel(animation);
        mCanceled = true;
    }

    public boolean isCanceled() {
        return mCanceled;
    }
}

使用:

ObjectAnimator rightAvatarScaleXAnimator = ObjectAnimator.ofFloat(mRightAvatar, "scaleX", 1.03f, 1.0f);
ObjectAnimator rightAvatarScaleYAnimator = ObjectAnimator.ofFloat(mRightAvatar, "scaleY", 1.03f, 1.0f);
mLastAnimatorSet = new AnimatorSet();
mLastAnimatorSet.play(rightAvatarScaleXAnimator).with(rightAvatarScaleYAnimator);
mLastAnimatorSet.setDuration(100);
mLastAnimatorSet.start();
mLastAnimatorSet.addListener(new CancelAnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation) {
        super.onAnimationEnd(animation);
        if (isCanceled()) {return;}
        if (mMiddleAvatar == null) { return; }
        mRightAvatar.setTranslationX(0);
        mRightAvatar.setAlpha(0.0f);
        mRightAvatar.setScaleX(1.0f);
        mRightAvatar.setScaleY(1.0f);
        mMiddleAvatar.setAlpha(1.0f);
        startMatchTipsAnimation();
    }
});

 

 

你可能感兴趣的:(ObjectAnimator 动画后 恢复初始状态)