2012-02-22 5 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> 

Я гнал анимационный-лист в 3-х различных видах (три whells) в основной раскладке с помощью атрибута андроида: фон

android:background="@drawable/animwheel" 

Теперь, пользователь может остановить анимацию, нажав на три разные кнопки. Проблема в том, как я могу узнать, какая картина отображается в настоящее время? Есть ли метод getCurrentFrame() или что-то в этом роде?

Спасибо заранее!

+2

После прочтения AnimationDrawable здесь (http://goo.gl/e7kFU), я вижу, что у них есть имя переменной mCurFrame для отслеживания текущего кадра анимации. Но, к сожалению, он частный. Это будет более полезно, если они станут общедоступными. – anticafe

ответ

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; 
    } 
} 

Таким образом, переменная «номера кадра» будет охранять номер кадра, в вашем случае, 0, 1 или 2 Если у вас будет много кадров, вы можете сделать функцию, которая возвращает имя ('fruits1', 'fruits2' ...) на основе количества кадров, используя массив.

Смежные вопросы