2016-12-23 19 views
0

私はビデオを表示するアプリを持っています。ある時点で、私はビデオの場所に関する情報を提供したいと思います。たとえば、歴史的な場所の名前です。android Handler.postDelayed多くの場所で使用

final Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
    //Do something after 100ms 
    } 
}, 100); 

をしかし、私は何度もこのpostDelayedコメントを使用する場合、いくつかのメッセージが表示されたり追い越していない:私はこのコードを使用しています。遅れてテキストを表示する最良の解決策は何ですか?例えば、5秒後にテキストを表示し、15秒後にBテキストを表示し、30秒後にCテキストを表示する。私のコードは次のようになります:

 switch() 

     case 1: 
     openVideo(video1) 

     final Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
      //my message 
      } 
     }, 4000); 

break; 
     case 2: 

     openVideo(video2) 

     final Handler handler2 = new Handler(); 
     handler2.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
      //my second message 
      } 
     }, 3000); 


     handler2.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
      //my third message 
      } 
     }, 15000); 

break; 
+0

あなたはタイマー –

+1

Handler.postDelayedを(使用することができます)これを行うには正しい方法です。おそらくコードに何か間違ったことがあるでしょう。 – Rasmusob

+0

このコードをもう一度別々に実行したいのですか? –

答えて

2

複数の実行可能ファイルを使用します。各テキストの期間を長くします。

int mDuration=0,mAnimationDuration=5000; 


mDuration=mDuration+mAnimationDuration; 

//it called after 5 seconds 
handler.postDelayed(new Runnable() { 
@Override 
public void run() { 
    //Your first text 
} 
}, mDuration); 

mDuration=mDuration+mAnimationDuration; 

//it called after 10 seconds 
handler.postDelayed(new Runnable() { 
@Override 
public void run() { 
//Your second text 
} 
}, mDuration); 

mDuration=mDuration+mAnimationDuration; 

//it called after 15 seconds 
handler.postDelayed(new Runnable() { 
@Override 
public void run() { 
    //Your third text 
} 
}, mDuration); 
+0

すべてのテキストが同じテキストビューで変更されるので、私はスイッチケースを使用しています。各ケースには新しいハンドラがあります。ハンドラがエラーを返します。テキストが変化したり追い越されないことがあります。私は確信していないそれぞれのケースステートメントで新しいハンドラを使用するのは間違っている可能性があります。 – mehmet

+0

@ mehmetあなたはあなたのスイッチでbreak文を逃してしまいます** case 2 ** ..これは問題かもしれません。 –

+0

@Ranjth最後の行が壊れています – mehmet

1

秒ごとに使用するタイマー...

new Timer().scheduleAtFixedRate(new TimerTask() { 
       @Override 
       public void run() { 
       //put you code here 
       //or set switch case for time 5,10,15 seconds 
       } 
      }, 0, 1000);//put here time 1000 milliseconds=1 second 
+0

timerとhandler.postDelayの主な違いは何ですか? – mehmet

+0

タイマーは指定されたタイムスタンプで自動的に実行され、満足する答えがあれば答えを受け入れます。 – Naitik

関連する問題