2010-11-06 72 views
5

我在Android中執行animationdrawable時遇到了一個常見問題。我想在onCreate()方法中的Activity開始時啓動一個動畫,但很多人發現它不起作用。Android中的AnimationDrawable問題

我讀過很多的建議,但似乎沒有任何工作對我來說。如果我在onClick()中啓動動畫,它將起作用,它需要用戶輸入,而不是立即開始。

我試着在onCreate()中的一個單獨的線程中啓動它,但這也不起作用。我讀到這裏:

http://code.google.com/p/android/issues/detail?id=1818

但沒有建議的工作,否則我無法理解。

有人可以幫忙嗎?

回答

0

根據您提供的鏈接,您必須在單獨的線程中啓動動畫。在Java中你做到這一點通過實現Runnable接口,並

Thread t = new Thread(new MyRunnable()); // MyRunnable inherits Runnable 
t.start(); 

啓動它,你也可以這樣寫

new Thread(new Runnable() { 
    public void run(){ 
     // some code that runs outside the ui thread. 
    } 
}).start(); 

的代碼,如果你不希望實現一個全新的類。後者當然不是那麼漂亮,但如果你正在做一個小項目,可以很好地瞭解。

你有沒有嘗試過這種方式,或者你有另一種方式開始你的線程?

另請閱讀Painless Threading,其中討論了在ui線程之外執行操作的可能性以及如何從自己的線程發佈在ui線程上運行的方法。


編輯:審查你貼你開始你的線程之前等待一段時間,大概要到的onCreate完成鏈接後。根據the flowchart on this page,您應該能夠稍後開始動畫,例如在onResume調用中。你有沒有嘗試在onCreate之後調用的方法啓動它?

您應該只有創建事情onCreate,並在onStart或onResume「啓動」他們。

3

我面臨類似的問題,並切換到覆蓋onWindowFocusChanged()代替的onCreate()和的onResume():

public void onWindowFocusChanged(boolean hasFocus) 
{ 
    if (hasFocus) 
    { 
     animation.start(); 
    } 
    else 
    { 
     animation.stop(); 
    } 
} 
+0

這個工程設置SRC,但我想它不會給大多數人足夠的控制做他們想要的東西;例如在任務啓動之前啓動動畫,然後停止。 – 2011-07-30 07:53:46

+0

這確實有效,但我發現如果我在'onWindowFocusChanged(true)'之前調用'animation.start()',然後再次調用'動畫。從onWindowFocusChanged(true)開始()'',那麼動畫將不會啓動!所以我必須做的是跟蹤UI狀態。所以在Vaiden的'if(hasFocus)'中,我設置了一個成員變量'isVisible = true;'和所有後續的animation.start()'首先檢查'isVisible == true'。當自動啓動各種動畫時,它是一個*主要* PITA。 – 2012-10-16 23:24:34

1

我認爲你有問題的看法的初始化之後啓動動畫做完了。你應該能夠做這樣的事情:

final ImageView tweenImage = (ImageView) findViewById(R.id.imageView1); 
tweenImage.setBackgroundResource(R.anim.cubicfacetween);  
tweenImage.post(new Runnable() { 
    @Override 
    public void run() { 
     AnimationDrawable frameAnimation = 
      (AnimationDrawable) tweenImage.getBackground(); 
     frameAnimation.start(); 
    } 
} 

對於imageView

((ImageView)findViewById(R.id.no_network_icon)).post(new Runnable() { 
      @Override 
      public void run() { 
       AnimationDrawable drawable = (AnimationDrawable) ((ImageView)findViewById(R.id.no_network_icon)).getDrawable(); 
       drawable.start(); 
      } 
     }); 
+0

這工作在Nexus 4,Nexus 5和舊的索尼Erricson運行2.3但它不適用於運行4.03的HTC One V ...任何想法?動畫視圖不會繪製...如果我用一種顏色替換動畫,視圖顯得很好。 – Stephen 2013-12-16 15:49:58

+0

發佈代碼片段。通過區分設置後臺屬性中的Animation.xml或ImageView的src屬性來解決 – 2013-12-18 07:21:57

+0

問題。 – 2015-02-26 21:40:41