2011-08-22 71 views
1

我想在android中執行逐幀動畫。對於這個任務,我創建了一個名爲「anim.xml」像這樣的XML文件:問題關於逐幀動畫的具體android問題

<?xml version="1.0" encoding="utf-8"?> 
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
    android:oneshot="false"> 
    <item android:drawable="@drawable/square0" android:duration="100" /> 
    <item android:drawable="@drawable/square1" android:duration="100" /> 
    <item android:drawable="@drawable/square2" android:duration="100" /> 
    <item android:drawable="@drawable/square3" android:duration="100" /> 
    <item android:drawable="@drawable/square4" android:duration="100" /> 
    <item android:drawable="@drawable/square5" android:duration="100" /> 
    </animation-list> 

然後,在我所定義的幀結構,我試圖將其設置爲背景,並啓動它在的onCreate這樣的:

FrameLayout imgView = (FrameLayout)findViewById(R.id.frameLayout1); 
    imgView.setBackgroundResource(R.drawable.anim); 
    AnimationDrawable anim = (AnimationDrawable) imgView.getBackground(); 
    anim.start(); 

我所經歷的僅僅是第一幀,但我要做的是將一個正方形的動畫放在循環中。你對我做錯了什麼有什麼意見嗎?

乾杯。

回答

1

我在嘗試使動畫在onCreate方法中啓動時遇到過問題。嘗試使用類似以下內容來修改最後一行:

imgView.post(new Runnable() 
    {  
     @Override 
     public void run() 
     { 
      anim.start(); 
     } 
    }); 

這將使您在onCreate執行後啓動動畫。

+0

有趣,但它的作品是這樣^^ – Pumpkin

4

對我來說,馬特的解決方案似乎對這種情況有點過分。您只需將start()方法的呼叫移至onWindowFocusChanged()方法即可,因爲此時AnimationDrawable已完全附加到該窗口並且可以實際啓動。就像這樣:

@Override 
public void onWindowFocusChanged(boolean hasFocus) 
{ 
    super.onWindowFocusChanged(hasFocus); 
    anim.start(); 
} 

做所有其他的東西在你的onCreate()方法,使AnimationDrawable類變量,這樣你就可以從onWindowFocusChanged()方法來訪問它。