Javaを学習し始めて3カ月ぐらいですが、いろいろなサイトやブログを見てみたのですが、よくわからなかったので今回投稿させていた抱きました。
ストップウォッチの制作しているのですが、タイムの計測はうまくできているのですが、カウントアップで表記するやり方がイマイチ理解できていなくてどうやって表示させればいいのかわかっていない次第です。
handlerを使えばいいとは思うのですが、よくわかっていない部分が多くて困ってます。
Java
1 2import android.os.Bundle; 3import android.support.v7.app.AppCompatActivity; 4import android.view.View; 5import android.widget.Button; 6import android.widget.TextView; 7 8public class MainActivity extends AppCompatActivity { 9long start; 10long stop; 11long stay; 12long rapStop; 13private boolean toggleSS; 14long disPlayTimeMm; 15long disPlayTimeSs; 16long disPlayTimeMs; 17 @Override 18 protected void onCreate(Bundle savedInstanceState) { 19 super.onCreate(savedInstanceState); 20 setContentView(R.layout.activity_main); 21 toggleSS = false; 22 23 24 25 findViewById(R.id.buttonSS).setOnClickListener( 26 new View.OnClickListener() { 27 @Override 28 public void onClick(View v) { 29 if(v.getId() == R.id.buttonSS){ 30 31 if (toggleSS == false) { 32 ((Button)findViewById(R.id.buttonSS)).setText("STOP"); 33 ((Button)findViewById(R.id.buttonRR)).setText("RAP"); 34 toggleSS = true; 35 }else{ 36 ((Button)findViewById(R.id.buttonSS)).setText("START"); 37 ((Button)findViewById(R.id.buttonRR)).setText("RESET"); 38 toggleSS = false; 39 } 40 if(toggleSS == true && v.getId() == R.id.buttonSS){ 41 start = System.nanoTime();//スタート時の時間を取得 42 } 43 if(toggleSS == false && v.getId() == R.id.buttonSS){ 44 stop = System.nanoTime();//ストップさせた時間を取得 45 stay = stay + (stop - start);//ストップさせてからリスタートさても時間がそこから始まるように前の時間に今の時間を加算して出力 46 if((double)stay/1000/1000/1000 > 60){ 47 disPlayTimeMm = stay/1000/1000/1000/60; 48 } 49 disPlayTimeSs = stay/1000/1000/1000%60; 50 disPlayTimeMs = (stay - disPlayTimeMm*1000*1000*1000*60 - disPlayTimeSs*1000*1000*1000)/10000000; 51 ((TextView)findViewById(R.id.textView)).setText(String.valueOf(disPlayTimeMm + ":" + disPlayTimeSs + "." + disPlayTimeMs)); 52 } 53 } 54 } 55 } 56 ); 57 58 findViewById(R.id.buttonRR).setOnClickListener( 59 new View.OnClickListener() { 60 @Override 61 public void onClick(View v) {//リセットを押したときでstayの中身を初期化 62 if(toggleSS == false && v.getId() == R.id.buttonRR){ 63 ((TextView)findViewById(R.id.textView)).setText("00:00.00"); 64 stay = 0; 65 }if(toggleSS == true && v.getId() == R.id.buttonRR){ 66 rapStop = System.nanoTime(); 67 stay = rapStop - start; 68 if((double)stay/1000/1000/1000 > 60){ 69 disPlayTimeMm = stay/1000/1000/1000/60; 70 } 71 disPlayTimeSs = stay/1000/1000/1000%60; 72 disPlayTimeMs = (stay - disPlayTimeMm*1000*1000*1000*60 - disPlayTimeSs*1000*1000*1000)/10000000; 73 ((TextView)findViewById(R.id.textView)).setText(String.valueOf(disPlayTimeMm + ":" + disPlayTimeSs + "." + disPlayTimeMs)); 74 } 75 } 76 } 77 ); 78 } 79}
コードがものすごく拙いとは思いますが、よろしくお願いします。
追記です。
すいません。初めて投稿したので勝手がよくわからず、質問者として解答してもらう人の立場を考慮していなかったです。
現在の状況では、TextViewには00:00.00がResetをさせた時とonCreate時に記載させています。今のままのコードだと、textViewが動かないといいますか、スタートさせたときにtextViewが変動せずにボタンを押したときにタイムが出力される状態で、ボタンを押すまでtextViewは00:00.00のままなので、スタートを押した際にミリ秒・秒・分を0→1→2→3とカウントアップさせて表示させるように変更したいと思っています。
どのようにしたらカウントアップさせられるのかを教えてほしいです。
よろしくお願いします。