Кадровая анимация не работает - PullRequest
1 голос
/ 03 июля 2011

Я пробовал каждый образец кода, который я могу найти, который определяет и выполняет анимацию кадра, но ImageView никогда не изменяется. Исходное изображение в ImageView остается.

EDIT: После многих дней проб и ошибок я запустил APK на своем телефоне вместо эмулятора. Он работает на моем телефоне, но почему-то не на эмуляторе.

Ответы [ 3 ]

4 голосов
/ 03 июля 2011

Мне не совсем понятно, почему вы не можете запускать анимации из потока onCreate, они должны быть отправлены в любой поток, в котором был создан обработчик представления.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    final ImageView view = (ImageView) findViewById(R.id.shell);
    view.setVisibility(ImageView.VISIBLE);
    view.setBackgroundResource(R.drawable.animation_frame);

    view.post(new Runnable(){

      public void run(){
        AnimationDrawable frameAnimation =  (AnimationDrawable) view.getBackground();
        frameAnimation.start();
      }
    });
   }
}

Понятия не имею, зачем вам это делать, но вы делаете.

edit: Вот отрывки из моего рабочего проекта должны быть все, что вам нужно ...

в Java в onCreate:

final ImageView image1 =  (ImageView) v.findViewById(R.id.coin1);
image1.post(new Runnable() {

        @Override
        public void run() {
            AnimationDrawable ani = (AnimationDrawable) image1.getBackground();
            ani.start();
        }
    });

в формате xml:

        <ImageView android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/coin"
        android:id="@+id/coin1"/>

монета xml:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
    <item android:drawable="@drawable/coin_spin_a" android:duration="100"/>
    <item android:drawable="@drawable/coin_spin_b" android:duration="100"/>
    <item android:drawable="@drawable/coin_spin_c" android:duration="100"/>
    <item android:drawable="@drawable/coin_spin_d" android:duration="100"/>
    <item android:drawable="@drawable/coin_spin_e" android:duration="100"/>
    <item android:drawable="@drawable/coin_spin_f" android:duration="100"/>
</animation-list>
0 голосов
/ 25 июля 2011

Хочу добавить комментарий к ответу schwiz.

Мне удалось заставить его работать, вызвав Handler.post из рабочего потока.Ниже приведен образец.

public void onCreate(Bundle savedInstanceState) {

    Thread t;
    final ImageView activityIndicator;
    final AnimationDrawable animiDrawable;
    LinearLayout contentPlaceholder;

    contentPlaceholder = (LinearLayout)this.findViewById(R.id.content_placeholder);
    activityIndicator = new ImageView(this);
    contentPlaceholder.addView(activityIndicator);
    activityIndicator.setBackgroundResource(R.drawable.ic_activity_indicator_bar);
    animiDrawable = (AnimationDrawable)activityIndicator.getBackground();

    t = new Thread(new Runnable() {
        @Override
        public void run() {
            mCbt.mThreadHandler.post(new Runnable() {
                @Override
                public void run() {
                    animiDrawable.start();
                }
            });
        };
    });
    t.start();
}
0 голосов
/ 03 июля 2011

Я тоже некоторое время боролся с этим. Это объясняется в уроке по анимации фреймов Android, но, скажем, «строчными буквами». Позвольте мне скопировать ответ оттуда:

Важно отметить, что метод start (), вызываемый для AnimationDrawable, не может быть вызван во время метода onCreate () вашего Activity, поскольку AnimationDrawable еще не полностью присоединен к окну. Если вы хотите немедленно воспроизвести анимацию, не требуя взаимодействия, то вы можете вызвать ее из метода onWindowFocusChanged () в вашей деятельности, который будет вызываться, когда Android фокусирует ваше окно.

Это в самом низу http://developer.android.com/guide/topics/graphics/view-animation.html#frame-animation

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...