Проблема в покадровой анимации в Android - PullRequest
2 голосов
/ 30 декабря 2011

У меня проблема в Покадровая анимация в Android .На самом деле у меня много изображений в виде фреймов, для этого я создал различные файлы списка анимаций для разных анимаций.На главном экране у меня есть одно фоновое изображение, на котором у меня есть разные кнопки для различной анимации.Я также закончил с анимацией, но когда я нажимаю второй раз на кнопках, анимация не работает.Значит, это работает только один раз.Я не знаю, почему это происходит.Вот фрагмент кода моего проекта.

Файл списка анимации: -

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true">
<item android:drawable="@drawable/cat_angry0000" android:duration="50" />
<item android:drawable="@drawable/cat_angry0001" android:duration="50" />
<item android:drawable="@drawable/cat_angry0002" android:duration="50" />
<item android:drawable="@drawable/cat_angry0003" android:duration="50" />
<item android:drawable="@drawable/cat_angry0004" android:duration="50" />
<item android:drawable="@drawable/cat_angry0005" android:duration="50" />
<item android:drawable="@drawable/cat_angry0006" android:duration="50" />
<item android:drawable="@drawable/cat_angry0007" android:duration="50" />
<item android:drawable="@drawable/cat_angry0008" android:duration="50" />
<item android:drawable="@drawable/cat_angry0009" android:duration="50" />
<item android:drawable="@drawable/cat_angry0010" android:duration="50" />
<item android:drawable="@drawable/cat_angry0011" android:duration="50" />
<item android:drawable="@drawable/cat_angry0012" android:duration="50" />
<item android:drawable="@drawable/cat_angry0013" android:duration="50" />
<item android:drawable="@drawable/cat_angry0014" android:duration="50" />
<item android:drawable="@drawable/cat_angry0015" android:duration="50" />
<item android:drawable="@drawable/cat_angry0016" android:duration="50" />
<item android:drawable="@drawable/cat_angry0017" android:duration="50" />
<item android:drawable="@drawable/cat_angry0018" android:duration="50" />
<item android:drawable="@drawable/cat_angry0019" android:duration="50" />
<item android:drawable="@drawable/cat_angry0020" android:duration="50" />
<item android:drawable="@drawable/cat_angry0021" android:duration="50" />
<item android:drawable="@drawable/cat_angry0022" android:duration="50" />
<item android:drawable="@drawable/cat_angry0023" android:duration="50" />
<item android:drawable="@drawable/cat_angry0024" android:duration="50" />
<item android:drawable="@drawable/cat_angry0025" android:duration="50" />
</animation-list>

Код: -

ImageView rocketImage;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.catlayout);

    rocketImage = (ImageView) findViewById(R.id.backgroundCat);
    rocketImage.setImageBitmap(null);
    rocketImage.setBackgroundResource(R.anim.angry_tail_animation);
}

public void headButtonClicked(View v) {
    final AnimationDrawable mailAnimation = (AnimationDrawable) mMailTab.getBackground();
    mMailTab.post(new Runnable() {
    public void run() {
        if ( mailAnimation != null ) mailAnimation.start();
    }
    }); 
}

headButtonClicked - кнопка, размещенная мной для запуска анимации.Это работает только один раз.Если у вас есть идеи, как решить эту проблему, пожалуйста, помогите мне.

Спасибо

1 Ответ

3 голосов
/ 30 декабря 2011

В вашем анимационном XML-файле вы добавили атрибут android:oneshot="true", который означает, что вы хотите, чтобы анимация воспроизводилась только один раз. Для повторного воспроизведения вы должны сделать это android:oneshot="false"

UPDATE:

Если вы хотите запускать анимацию каждый раз, когда нажимаете кнопку, вы должны вызвать animation.stop(); для предыдущей запущенной анимации, если она запущена. Как то так,

if (frameAnimation.isRunning()) {
         frameAnimation.stop();
      }

      else {
         frameAnimation.stop();
         frameAnimation.start();
      }
...