2012-10-17 94 views
2

我有一個正用於顯示某些幀動畫的ImageView。 這些圖像的持續時間都設置爲100.AnimationDrawable動畫在可見性(不見)之後快速顯示(可見)

但是,有時需要隱藏ImageView。所以停止動畫並將ImageView設置爲GONE。

當需要再次顯示ImageView時,其可見性設置爲可見,並開始動畫。然而,動畫真的很快;但是,而不是100的持續時間,它看起來像50.但是,當我檢查持續時間它仍然說100 - 但它絕對不像它。

隱藏和顯示ImageView的是如下代碼:

//hide the animation 
    final AnimationDrawable frameAnim = (AnimationDrawable) animImgView.getBackground(); 
    if (frameAnim.isRunning() == true) 
    { 
     frameAnim.stop(); 
    } 

    frameAnim.setVisible(false, false); 
    animImgView.setVisibility(View.GONE); 




    //show animation 
    animImgView.setVisibility(View.VISIBLE); 

    final AnimationDrawable frameAnim = (AnimationDrawable) animImgView.getBackground(); 
    frameAnim.setVisible(true, true); 
    frameAnim.start(); 

可能是什麼麻煩?

回答

3

一些實驗後,我發現,最好的辦法是簡單地實現:

//hide the animation 
animImgView.setVisibility(View.GONE); 


//show animation 
animImgView.setVisibility(View.VISIBLE); 

這將保存動畫速度。我的動畫停止/啓動的初衷是爲了確保CPU不會超出需要。

0

要實現的不只是改變的知名度,同時也停止動畫時看不見原來的目標:

//hide the animation 
animImgView.setVisibility(View.GONE); 

//stop animation 
final AnimationDrawable frameAnim = (AnimationDrawable) animImgView.getBackground(); 
if (frameAnim.isRunning() == true) 
{ 
    frameAnim.stop(); 
} 

frameAnim.setVisible(false, false); 



//start animation 
final AnimationDrawable frameAnim = (AnimationDrawable) animImgView.getBackground(); 
frameAnim.setVisible(true, true); 
frameAnim.start(); 

//show animation 
animImgView.setVisibility(View.VISIBLE); 

這裏的區別是,啓動和停止動畫出現,而ImageView的是無形/不見了。出於某種原因,當動畫可見時啓動和停止動畫會導致計時問題。

來源:我自己遇到這個問題,並使用這種技術修復它。

0

與Android掙扎,我發現下一個解決方案:

不使用start()和stop()方法。

使用調用setVisible(真,真)啓動動畫:

animImgView.setVisibility(View.VISIBLE); 
final AnimationDrawable frameAnim = (AnimationDrawable) animImgView.getBackground(); 
frameAnim.setVisible(true, true); 

,並調用setVisible(假,真)停止它(注意是大膽真正):

final AnimationDrawable frameAnim = (AnimationDrawable) animImgView.getBackground(); 
frameAnim.setVisible(false, true); 
animImgView.setVisibility(View.GONE);