2012-05-07 118 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));

此外,尝试学习活动的生命周期和方法代表了UI回调并没有。

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

酷会试试这个谢谢 –