位移后 恢复状态: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();
}
});
本文详细介绍了在Android中如何对UI元素的位移、透明度、旋转和缩放等动画效果进行复位,并展示了如何取消AnimatorSet动画及自定义AnimatorListenerAdapter以监听动画取消状态。
1万+

被折叠的 条评论
为什么被折叠?



