我有一个活动,我有多个ImageViews,当你点击它时,ImageView将淡出并淡入。我想弄清楚的是我如何点击一个ImageView并启动动画,当我单击第二个,动画仍在运行,它将忽略第二个。我想我需要对animationListener做一些事情,但是在我发起新动画之前,我无法弄清楚如何使用它来检查动画是否正在运行。我本来可以发誓我看到了一个这样做的例子,但我已经找了几天而又找不到它了,我希望有人能够在这里帮忙.....下面是我的代码动画:
// Create Animation
protected void fadeAnimation() {
tempImg.startAnimation(fadeout);
//Allow animation to finish
mHandler.postDelayed(new Runnable() {
public void run() {
tempImg.startAnimation(fadein);
}
}, 1000);
}
答案 0 :(得分:35)
我假设fadeout和fadein都是Animation
个对象。
使用fadeout.hasEnded()
检查第一个是否已完成,然后再开始第二个。
有关Animation
课程的更多详情,请参阅此处:
http://developer.android.com/reference/android/view/animation/Animation.html
答案 1 :(得分:3)
不必在另一个线程中循环检查动画是否已经结束,您可以使用动画侦听器,执行以下操作:
// Create Animation
protected void fadeAnimation() {
fadeout.setAnimationListener(new Animation.AnimationListener(){
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
tempImg.startAnimation(fadein);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
};
tempImg.startAnimation(fadeout);
}
使用这种解决方案,您不需要主动检查动画是否已完成,并在上一个动画的持续时间内对其进行计时。
动画结束后立即触发onAnimationEnd(动画)。这也解决了具有开发者选项的用户问题" on"并将动画速度设置为" off"。