2012-03-30 46 views
24

好吧,我有一個活動,我有多個ImageViews,當你點擊它時,ImageView將淡出並淡入。弄清楚我是如何點擊一個ImageView並開始動畫的,當我點擊第二個動畫並且動畫仍在運行時,它將忽略第二個動畫。我想我需要對animationListener做些什麼,但我無法弄清楚如何在啓動新動畫之前使用它來檢查動畫是否正在運行。我可以發誓我看到一個這樣做的例子,但我一直在尋找幾天,無法找到它,我希望有人能夠在這裏幫助.....下面是我的代碼動畫:ANDROID ANDROID - 如何在開始新動畫之前檢查動畫是否運行

// Create Animation 
protected void fadeAnimation() { 
    tempImg.startAnimation(fadeout); 
    //Allow animation to finish 
    mHandler.postDelayed(new Runnable() { 
     public void run() { 
     tempImg.startAnimation(fadein); 
     } 
    }, 1000); 
} 

回答

29

我假設淡出和淡入都是Animation對象。

使用fadeout.hasEnded()在開始第二個之前檢查第一個是否已完成。

有關Animation類的更多詳細信息,請參見這裏: http://developer.android.com/reference/android/view/animation/Animation.html

+5

當動畫還沒有運行時會發生什麼,所以不會返回錯誤的結果從而取消動畫。我會給它一個鏡頭,但這是我想到的第一個想法。感謝您的幫助。 – 2012-03-31 03:06:51

+0

這樣做,只需要在語法中改變一些東西,並且效果很好。我非常感謝幫助。謝謝一堆! – 2012-03-31 03:28:45

+1

@ChrisD我面臨同樣的問題。我檢查使用hasEnded()函數 但問題是第一次總是返回false.Can你幫我嗎? – Kunu 2014-07-24 07:14:32

2

而是在另一個線程檢查,如果動畫已經結束,你可以使用一個動畫監聽,做這樣的事情不必循環可能的:

// 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(動畫)在動畫結束後立即觸發。這也解決了開發者選項「開啓」和動畫速度設置爲「關閉」的用戶的問題。

相關問題