2010-07-03 4 views
1

Моя анимация работает, и когда поток заканчивается, намерение для следующего экрана срабатывает, но оно не срабатывает с конца анимации. Я помещаю записи журнала для всех обратных вызовов AnimationListener's (только конец находится в этом списке), но никто не регистрируется.Почему моя анимация для Android не вызывает мой onAnimationEnd?

public class PromoActivity extends Activity implements AnimationListener { 
    protected boolean _active = true; 
    protected int _splashTime = 5000; // time to display the splash screen in ms 

    private static final float ROTATE_FROM = 0.0f; 
    private static final float ROTATE_TO = -10.0f * 360.0f;// 3.141592654f * 32.0f; 
    private static final String TAG = "PromoActivity"; 

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

     Thread promoThread = new Thread() { 
      @Override 
      public void run() { 
       try { 
        ImageView favicon = (ImageView) findViewById(R.id.favicon); 

        RotateAnimation r; // = new RotateAnimation(ROTATE_FROM, ROTATE_TO); 
        r = new RotateAnimation(ROTATE_FROM, ROTATE_TO, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
        r.setDuration((long) 2*1500); 
        favicon.startAnimation(r); 

        RotateAnimation q; 
        q = new RotateAnimation(ROTATE_FROM, -ROTATE_TO, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
        q.setDuration((long) 2*1500); 
        q.setRepeatCount(0); 
        TextView mobiText = (TextView) findViewById(R.id.logotext_mobi); 
        mobiText.startAnimation(q); 

        TextView dawgText = (TextView) findViewById(R.id.logotext_bob); 
        dawgText.startAnimation(q); 

        int waited = 0; 
        while (_active && (waited < _splashTime)) { 
         sleep(100); 
         if (_active) { 
          waited += 100; 
         } 
        } 
       } catch (InterruptedException ex) { 

       } finally { 
        finish(); 
        startActivity(new Intent("com.mobibob.promo.AboutActivity")); 
        stop(); 
       } 
      } 
     }; 
     promoThread.start(); 

    } 

    @Override 
    public void onAnimationEnd(Animation animation) { 
     Log.d(TAG, "onAnimationEnd"); 
     startActivity(new Intent("com.mobibob.promo.AboutActivity")); 
    } 
} 
+0

Я предполагаю, что вы попытались удалить вызов startActivity в свой метод Thread.run, и действие не запускается? Если это не так, то я предполагаю, что onAnimationEnd IS вызывается, вы просто не видите сообщение журнала. – MatrixFrog

+0

На самом деле я нахожусь на своем телефоне Android, поэтому я не вижу весь код, который вы опубликовали. Но убедитесь, что вы всегда ставите @Override на методы, которые должны переопределять методы суперкласса. Таким образом, если вы каким-то образом испортите подпись, компилятор скажет вам – MatrixFrog

ответ

2

Вы не звоните Animation#setAnimationListener в любом месте. Вам необходимо позвонить r.setAnimationListener(PromoActivity.this) и/или q.setAnimationListener(PromoActivity.this) для вызывающего слушателя.

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

+0

О, хорошо. Хороший улов. Обычно я сначала набираю метод setListener, а затем позволяю Eclipse делать все остальное как «быстрые исправления». – MatrixFrog

+0

Вот и все! Раньше я пытался установить его с помощью Eclipse, но он не хотел заполнять (мой синтаксис был неправильным), поэтому я подумал, что это должно подразумеваться или дефолтно с моим предложением «реализация». Кроме того, спасибо за советы по нескольким анимациям. Я планировал использовать «теги», чтобы отличить, какой из них стрелял. Между тем, я узнал, что мой thread.stop() устарел. По-видимому, с моделью жизненного цикла нужно оставить это до Далвика. – mobibob

+0

Очень легко забыть слушателя и, наконец, решить мою проблему здесь. благодаря – Eenvincible