Android: как получить текущий кадр в AnimationDrawable - PullRequest
3 голосов
/ 22 февраля 2012

Мне нужна помощь с Android. Я пытаюсь создать игровой автомат. Итак, я использую AnimationDrawable для трех колес. Вот файл animwheel.xml:

<?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 разных представлениях (три колеса) в основной макет, используя атрибут android: background

android:background="@drawable/animwheel"

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

Заранее спасибо!

1 Ответ

13 голосов
/ 07 апреля 2012

У меня та же проблема, я перепробовал все функции и не добился успеха, потому что такие функции, как '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' ...) на основе номера кадра, используя массив.

...