2017-11-24 9 views
0

これは私の最初の質問です。必要な情報をすべて提供しなければ申し訳ありません。ただコメントして、私はそれを追加します。Androidスタジオ - アクティビティの開始遅延を設定する際に問題が発生する

問題自体に。私は短いビデオで構成された種類のスプラッシュ詐欺をしようとしています。私は、ビデオが終了した後、次のアクティビティを開始するアプリケーションを開始するが、私はすぐに2番目のアクティビティ(コードのMenu.class)を開始するアプリを起動した後。いったん私がメニューに入ったら、私は元に戻ることができますが、私が見るのは黒のVideoViewだけです。また、Handlerを追加する前にVideoViewが機能しました。たとえそれが問題(Androidスタジオの新機能)だったとしても、@Overrideを削除しても機能しないのかどうかはわかりません(おそらく愚かなのでしょうか?)。または、Menu.javaアクティビティによって引き起こされる可能性がありますか? (それはちょうど、標準事前に生成プリセットだ、私はそれに変更を加えなかった)任意およびすべてのアドバイスに

public class splash_screen extends AppCompatActivity { 
static long duration; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.requestWindowFeature(Window.FEATURE_ACTION_BAR); 
    setContentView(R.layout.activity_splash_screen); 

    VideoView videoView = this.findViewById(R.id.videoView); 
    String path = "android.resource://" + getPackageName() + "/" + R.raw.splash; 
    videoView.setVideoURI(Uri.parse(path)); 
    videoView.start(); 

    duration = videoView.getDuration(); 
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      startActivity(new Intent(splash_screen.this, Menu.class)); 
     } 
    }, duration); 
} 
} 

おかげで、など私はあなたが、問題の詳細情報が必要な場合は私に知らせて言いました。

答えて

0

VideoViewはので、ここで、ウォームアップするためにいくつかの時間を必要とする:

videoView.start(); 
duration = videoView.getDuration(); 

期間は0可能性があり、それはすぐに、なぜハンドラが起動されます。 2番目のアクティビティに切り替えるには、ハンドラ部分を削除して使用する必要があります。

videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
    @Override 
    public void onCompletion(MediaPlayer mediaPlayer) { 
      startActivity(new Intent(splash_screen.this, Menu.class)); 
      finish();//close activity 
    } 
}); 
+0

ワークスアニメーションの一部を行うことができ、その答えに感謝をたくさん。 – ThatMatt

0

また、Thread.sleep(ミリ秒)を使用できます。あなたはスプラッシュスクリーン に完全なコードのアニメーションを追加する場合:

Thread t=new Thread(){ 
     @Override 
     public void run() { 
      try{ 
       sleep(3000); 
      } 
     catch (InterruptedException e){ 
      } 
      finally { 

       startActivity(i); 
      } 
     } 
    }; 
    t.start(); 

をそれが3秒の遅延を与え、あなたはその中に魔法のように

+0

前の回答はこのシナリオでは問題なく動作しますが、アドバイスをいただきありがとうございます。将来intに役立つかもしれない:) – ThatMatt

関連する問題