AnimationDrawable в проблеме Android - PullRequest
5 голосов
/ 06 ноября 2010

У меня общая проблема с анимацией в Android.Я хотел запустить анимацию при запуске Activity в методе onCreate (), но, как обнаружили многие, он не работает.

Я прочитал много советов, но мне кажется, что ничего не работает,Если я запускаю анимацию в onClick (), она работает, она требует пользовательского ввода, а не запускается сразу.

Я попытался запустить ее в отдельном потоке в onCreate (), но это тоже не работает.Я читаю здесь:

http://code.google.com/p/android/issues/detail?id=1818

, но ни один из советов не сработал, или я не мог его понять.

Может кто-нибудь помочь?

Ответы [ 3 ]

3 голосов
/ 07 февраля 2011

Я столкнулся с похожими проблемами и переключился на переопределение onWindowFocusChanged () вместо onCreate () и onResume ():

public void onWindowFocusChanged(boolean hasFocus) 
{
    if (hasFocus)
    {
        animation.start();
    }
    else
    {   
        animation.stop();
    }
}
1 голос
/ 07 января 2013

Я думаю, что вы должны запустить анимацию после завершения инициализации рассматриваемого представления. Вы должны быть в состоянии сделать что-то вроде этого:

final ImageView tweenImage = (ImageView) findViewById(R.id.imageView1);
tweenImage.setBackgroundResource(R.anim.cubicfacetween);      
tweenImage.post(new Runnable() {
    @Override
    public void run() {
        AnimationDrawable frameAnimation =
            (AnimationDrawable) tweenImage.getBackground();
        frameAnimation.start();
    }
}

Для установки источника в imageView

((ImageView)findViewById(R.id.no_network_icon)).post(new Runnable() {
            @Override
            public void run() {
                AnimationDrawable drawable = (AnimationDrawable) ((ImageView)findViewById(R.id.no_network_icon)).getDrawable();
                drawable.start();
            }
        });
0 голосов
/ 06 ноября 2010

По предоставленной вами ссылке вы должны запустить анимацию в отдельном потоке.В Java вы делаете это путем реализации интерфейса Runnable и запускаете его с

Thread t = new Thread(new MyRunnable()); // MyRunnable inherits Runnable
t.start();

, вы также можете написать код, подобный этому

new Thread(new Runnable() {
    public void run(){
        // some code that runs outside the ui thread.
    }
}).start();

, если вы неЯ не хочу реализовывать совершенно новый класс.Последнее, конечно, не очень красиво, но если вы делаете небольшой проект, о нем может быть полезно узнать.

Вы пробовали его таким образом или вы начали свою тему другим способом?

Пожалуйста, прочитайте также Потоки безболезненно , в которых рассказывается о том, какие возможности у вас есть для выполнения действий вне потока пользовательского интерфейса, и как публиковать методы, запускаемые в потоке пользовательского интерфейса из ваших собственных потоков.


Редактировать: После просмотра ссылки, которую вы разместили, вы должны подождать некоторое время, прежде чем начинать цепочку, вероятно, до завершения onCreate.Согласно блок-схеме на этой странице вы сможете запустить анимацию позже, например, при вызове onResume.Вы пытались запустить его в методе, вызванном после onCreate?

Вам нужно только создать вещей в onCreate и «запустить» их в onStart или onResume.

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