0

私はAndroid開発に非常に慣れていないので、少しずつ把握しようとしています!

スプラッシュ スクリーンを実装しようとしていますが、次のアクティビティに切り替わる前にアニメーションを実行したいと考えています。私は1、2時間それを理解しようとしてきましたが、このサイトに出くわしたので、ここに行きます.これは私が試したことです.

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

助けてくれたすべての人に感謝します!

4

2 に答える 2

0

onCreate() 自体でアニメーションを開始
onAnimationEnd()し、別のスレッドで行っていることを実行します。

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

また、アクティビティのライフ サイクルと、どのメソッドが UI コールバックを表し、どのメソッドがそうでないかを理解してください。

于 2012-05-07T12:27:16.420 に答える
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();
    }
于 2012-05-07T12:40:27.960 に答える