2017-01-06 6 views
3

handlerを使用して現在の秒を印刷したいとします。私は正確に10 secondsのビデオを記録し、毎秒TextViewのテキストを設定したいと思います。ハンドラーpostDelayed - 毎秒何かを印刷する

記録10秒はそのように動作します:10秒実行されますstopRecordingVideo()方法後

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
      stopRecordingVideo(); 
    } 
}, 11000); // don't know why 11000 but it only works this way 

。 TextViewの1秒ごとにテキストを変更するにはどうすればよいですか?

答えて

1

仕事の答え:

int t = 0; 
Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     t++; 
     textView.setText(getString(R.string.formatted_time, t)); 
     if(t<10) { 
      handler.postDelayed(this, 1000); 
     } 
    } 
}, 1000); 

どこFORMATTED_TIMEであるようなもの:

<string android:name="formatted_time">%d seconds</string>

+1

私はtを最終int []として宣言しなければなりませんでしたが、後で実行すると、実行可能なスレッドは1秒後にrunnableを実行します。それは働きました。ありがとう! – Roses

1

1秒ごとにテキストを印刷するには、CountDownTimerを使用します。あなたは、コードの下にしようとしてこれを達成したいなら:

void startTime(){ 
    //Post handler after 1 second. 
    handler.postDelayed(runnable, 1000); 
} 

int totalDelay=0; 
Handler handler = new Handler(); 
Runnable runnable = new Runnable() { 
    @Override 
    public void run() { 
     totalDelay++; 
     if(totalDelay<=10){ 
      //If total time is less then 10 second execute handler again after 1 second 
      handler.postDelayed(runnable, 1000); 
     } 
     textView.setText(totalDelay+" Second"); 
    } 
}; 
+0

なぜここのstartTime方法ありますか?私はそれが本当に必要ないのですか? – mafioso

+0

はい、単に "handler.postDelayed(runnable、1000);"タイマーを開始する。 –

+0

私の場合、いつ私は 'StopRecordingVideo'を呼び出す必要がありますか?このコードのすぐ下にありますか? – mafioso

1

はこれを試してみてください、基本的にワーカースレッドの増分を行いますが、テキストビューを更新するのメインスレッドハンドラによって行われます。

Thread worker= new Thread(new Runnable() { 
     @Override 
     public void run() { 
      for (int i = 0; i < 10; i++) { 
       try { 
        TimeUnit.SECONDS.sleep(1); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      // stop recording after 10 seconds 
       if (i == 9) { 

        handler.post(new Runnable() { 
        @Override 
        public void run() { 
         stopRecordingVideo(); 
        } 
        }); 
       } 

       else{ 
        // set text for each second 
        handler.post(new Runnable() { 
        @Override 
        public void run() { 
         textView.setText(String.valueOf(i+1)); 
        } 
        }); 

       } 
      }//ends for() 

    worker.start() 
関連する問題