2012-02-22 71 views
3

我需要Android的幫助。 我正在嘗試創建一款老虎機遊戲。所以,我爲三個輪子使用了AnimationDrawable。這裏是animwheel.xml文件:Android:如何在AnimationDrawable中獲取當前幀

<?xml version="1.0" encoding="utf-8"?> 
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/animWheel" 
android:oneshot="false" > 

<item 
    android:drawable="@drawable/fruits1" 
    android:duration="200"/> 
<item 
    android:drawable="@drawable/fruits2" 
    android:duration="200"/> 
<item 
    android:drawable="@drawable/fruits3" 
    android:duration="200"/> 
</animation-list> 

我使用屬性的Android推杆動畫列表中主要佈局3周不同的看法(三個whells):背景現在

android:background="@drawable/animwheel" 

中,用戶可以通過點擊三個不同的按鈕來停止動畫。問題是我怎麼知道當前視圖顯示的是哪張圖片? 有沒有getCurrentFrame()方法或類似的東西?

預先感謝您!

+2

在閱讀這裏的AnimationDrawable(http://goo.gl/e7kFU)後,我看到他們有一個變量名mCurFrame來跟蹤當前的動畫幀。但不幸的是,它是私人的。如果他們將其設置爲公開,它會更有用。 – anticafe 2012-10-08 07:25:36

回答

14

我有同樣的問題,嘗試每個功能,並沒有成功,因爲像'getCurrentFrame()'這樣的函數返回一個十六進制值,每次運行你的應用程序時都會改變,所以,我做了一些解決我的問題問題,並希望解決你的問題:

而不是嘗試獲取幀的圖像('fruits1')的名稱,您必須獲取框架的位置,將該用戶採集的動畫放在框架'fruits2' ,因此,幀的數量是1,因爲0是幀'fruits1'。你會怎麼做?

// Create the animation 
myImage.setBackgroundResource(R.anim.myanimation); 
myAnimation = (AnimationDrawable) myImage.getBackground(); 

當你停止動畫,你做這樣的事:

myAnimation.stop(); 

// The variable that will guard the frame number 
int frameNumber; 

// Get the frame of the animation 
Drawable currentFrame, checkFrame; 
currentFrame = myAnimation.getCurrent(); 

// Checks the position of the frame 
for (int i = 0; i < myAnimation.getNumberOfFrames(); i++) { 
    checkFrame = myAnimation.getFrame(i); 
    if (checkFrame == currentFrame) { 
     frameNumber = i; 
     break; 
    } 
} 

因此,變量「frameNumber的」能保護幀的數量,你的情況,0,1,或2 如果將有很多幀,可以使用數組來創建一個函數,該函數返回基於幀編號的名稱('fruits1','fruits2'...)。