Проблемно-специфический вопрос для Android относительно покадровой анимации - PullRequest
1 голос
/ 22 августа 2011

Я пытаюсь выполнять покадровую анимацию в Android.Для этой задачи я создал xml-файл с именем «anim.xml», например:

    <?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();

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

Приветствия.

Ответы [ 2 ]

4 голосов
/ 14 сентября 2011

Мне кажется, что решение Мэтта в этом случае немного подавлено. Вы можете просто переместить вызов метода start() в метод onWindowFocusChanged(), потому что в этот момент AnimationDrawable полностью присоединен к окну и фактически может быть запущен. Как это:

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

Сделайте все остальные вещи в вашем onCreate() методе и сделайте AnimationDrawable переменной класса, чтобы вы могли получить к ней доступ из метода onWindowFocusChanged().

1 голос
/ 22 августа 2011

У меня раньше возникали проблемы при попытке запустить анимацию в методе onCreate.Попробуйте изменить свою последнюю строку следующим образом:

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

Это существенно заставит вас начать анимацию после выполнения onCreate.

...