Android 检查AnimatorSet是否已完成动画?
我正在尝试使用Android 检查AnimatorSet是否已完成动画?,android,animation,objectanimator,Android,Animation,Objectanimator,我正在尝试使用AnimatorSet 按钮淡入>单击按钮>其余按钮淡出 因此,为了做到这一点,我想在动画完成后设置onClickListner,但这似乎不起作用。点击动画中间的按钮触发OnCutton动作 >: setQuestion = new AnimatorSet(); setQuestion.playSequentially(fadeinAnimationQ,fadeinAnimation1,fadeinAnimation2,fadeinAnimation3,fad
AnimatorSet
按钮淡入>单击按钮>其余按钮淡出
因此,为了做到这一点,我想在动画完成后设置onClickListner
,但这似乎不起作用。点击动画<代码>中间的按钮触发OnCutton动作 >:
setQuestion = new AnimatorSet();
setQuestion.playSequentially(fadeinAnimationQ,fadeinAnimation1,fadeinAnimation2,fadeinAnimation3,fadeinAnimation4,fadeinAnimation5);
setQuestion.start();
这是检查动画是否已完成的方法
private void checkAnimation() {
while (true) {
// Check if animation has ended
if (setQuestion.isRunning() == false) {
assignListners();
break;
}
}
}
您可以在fadeinAnimation5上设置。
这将给您一个onAnimationEnd回调
fadeinAnimation5.addListener(new AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
// ...
}
@Override
public void onAnimationRepeat(Animator animation) {
// ...
}
@Override
public void onAnimationEnd(Animator animation) {
// ...
}
@Override
public void onAnimationCancel(Animator animation) {
// ...
}
});
或者,如使用
我遇到了一个类似的问题,下面是我如何解决的:
private void crossFadeAnimation(final View fadeInTarget, final View fadeOutTarget, long duration){
AnimatorSet mAnimationSet = new AnimatorSet();
ObjectAnimator fadeOut = ObjectAnimator.ofFloat(fadeOutTarget, View.ALPHA, 1f, 0f);
fadeOut.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
fadeOutTarget.setVisibility(View.GONE);
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
fadeOut.setInterpolator(new LinearInterpolator());
ObjectAnimator fadeIn = ObjectAnimator.ofFloat(fadeInTarget, View.ALPHA, 0f, 1f);
fadeIn.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
fadeInTarget.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd(Animator animation) {}
@Override
public void onAnimationCancel(Animator animation) {}
@Override
public void onAnimationRepeat(Animator animation) {}
});
fadeIn.setInterpolator(new LinearInterpolator());
mAnimationSet.setDuration(duration);
mAnimationSet.playTogether(fadeOut, fadeIn);
mAnimationSet.start();
}
实际上,可以直接将侦听器设置为AnimatorSet,因为AnimatorSet继承自Animator。下面是一些代码:
import android.animation.Animator;
AnimatorSet setQuestion = new AnimatorSet();
setQuestion.playSequentially(fadeinAnimationQ,fadeinAnimation1,fadeinAnimation2,fadeinAnimation3,fadeinAnimation4,fadeinAnimation5);
setQuestion.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
}
@Override
public void onAnimationEnd(Animator animator) {
// !! turn on your onClickListener here !!
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
});
setQuestion.start();
下面是如何添加AnimatorListner的方法:如果您不需要所有事件,可以使用AnimatorListeneraAdapter,这样可以使事情变得更简单。我喜欢的一个警告注释。如果动画完成或取消,则同时调用onAnimationEnd回调。要仅在动画完成时收到通知,请改用withEndAction(Runnable)。
import android.animation.Animator;
AnimatorSet setQuestion = new AnimatorSet();
setQuestion.playSequentially(fadeinAnimationQ,fadeinAnimation1,fadeinAnimation2,fadeinAnimation3,fadeinAnimation4,fadeinAnimation5);
setQuestion.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
}
@Override
public void onAnimationEnd(Animator animator) {
// !! turn on your onClickListener here !!
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
});
setQuestion.start();