2012-05-07 2 views
0

Я очень новичок в разработке Android и пытаюсь понять его понемногу!Android - завершение активности на конце анимации?

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

public class SplashActivity extends Activity { 
    // THREAD TO PROCESS SPLASH SCREEN 
    private Thread splashThread; 
    // ANIMATION END FIELD 
    private boolean ANIMATION_END; 
    // CALLED WHEN ACTIVITY IS FIRST CREATED 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // SET THE SPLASH SCREEN XML LAYOUT 
     setContentView(R.layout.splash); 
     // GET THE SPLASH IMAGE 
     final ImageView logo = (ImageView) findViewById(R.id.splash_logo); 
     // LOAD START ANIMATION FOR SPLASH IMAGE 
     final Animation slideIn = AnimationUtils.loadAnimation(this, R.anim.slide_in_right); 
     // START ANIMATE SPLASH LOGO 
     logo.startAnimation(slideIn); 
     // END ANIMATION SPLASH LOGO 
     final Animation slideOut = AnimationUtils.loadAnimation(this, R.anim.slide_out_left); 
     // SET EVENT LISTENER FOR ANIMATION TO FINISH 
     slideOut.setAnimationListener(new Animation.AnimationListener(){ 
      @Override 
      public void onAnimationStart(Animation animation) { 
      }   
      @Override 
      public void onAnimationRepeat(Animation animation) { 
      }   
      @Override 
      public void onAnimationEnd(Animation animation) { 
        ANIMATION_END = true; 
      } 
     }); 
     // SET SPLASHSCREEN THREAD 
     splashThread = new Thread() { 
      @Override 
      public void run() { 
       try { 
        synchronized(this) { 
         // DURATION OF SPLASH SCREEN 
         wait(4000); 
        } 
       } catch (InterruptedException e) { 

       } 
       logo.startAnimation(slideOut); 
       // IF ANIMATION HAS ENDED 
       if (ANIMATION_END == true) { 
        finish(); 
        // SWITCH FROM SPLASH ACTIVITY TO MENU ACTIVITY 
        startActivity(new Intent(SplashActivity.this, MenuActivity.class)); 
       } 
      } 
     }; 
     // RUN THE SPLASH THREAD 
     splashThread.start();   
    } 
    // SPLASH SCREEN TOUCH EVENTS 
    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     // USER TOUCHES SPLASH SCREEN 
     if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      synchronized(splashThread) { 
       // MAKE SPLASH SCREEN END 
       splashThread.notifyAll(); 
      } 
     } 
     return true; 
    }  
} 

Вероятно, это не самый лучший код, который я знаю, но я пробовать. После того, как логотип скользит в нем, он резко заканчивается, когда он пытается переключиться на MenuActivity

Спасибо всем, кто помогает!

ответ

0

Начните свою анимацию непосредственно в onCreate() и в
onAnimationEnd() выполните эту вещь, которую вы делаете в отдельном потоке.

finish(); startActivity(new Intent(SplashActivity.this, MenuActivity.class));

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

0
private ImageView img; 
    private Thread t; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     img = (ImageView)findViewById(R.id.im1); 

     t = new Thread(){ 
      @Override 
      public void run() { 
       try { 
        synchronized(this){ 
         wait(2000); 
        } 
         // Here your code of animation 

       } 
       catch(InterruptedException ex){ 
        ex.printStackTrace(); 
       } 

       Intent i = new Intent(QuizActivity.this,main.class); 
       startActivity(i); 
      } 
     }; 
      t.start(); 
    } 
+0

Прохладный попробует это благодаря –

Смежные вопросы