我有一个活动,我有多个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);
}
我假设fadeout和fadein都是Animation
对象。
在开始第二个之前,使用fadeout.hasEnded()
检查第一个是否已完成。
有关Animation
类的更多详细信息,请参见:http://developer.android.com/reference/android/view/animation/Animation.html
可以使用动画监听器,而不是必须循环可能在另一个线程中检查动画是否已经结束,执行以下操作:
// 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”的用户的问题。