質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

1回答

2805閲覧

textViewの表示に際してカウントアップさせたいのですが…

yatagarasu1997

総合スコア6

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2016/12/06 12:38

編集2016/12/07 02:08

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とカウントアップさせて表示させるように変更したいと思っています。

どのようにしたらカウントアップさせられるのかを教えてほしいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yona

2016/12/06 15:15

コードだけ貼られても困りますね、このコードで現状どのような表示になるかを書いてください。理想と異なる事を具体的に書いてください。
guest

回答1

0

handlerを使えばいいとは思うのですが

こんな感じで

java

1 2 @Override 3 public void run() { 4 5 while (!stopRun) { 6 // sleep: period msec 7 try { 8 Thread.sleep(period); 9 } 10 catch (InterruptedException e) { 11 e.printStackTrace(); 12 stopRun = true; 13 } 14 15 handler.post(new Runnable() { 16 @Override 17 public void run() { 18 long endTime = System.currentTimeMillis(); 19 // カウント時間 = 経過時間 - 開始時間 20 long diffTime = (endTime - startTime); 21 22 timerText.setText(dataFormat.format(diffTime)); 23 24 25 } 26 }); 27 } 28 }

Ref: https://akira-watson.com/android/system-currenttimemillis.html

Thread.sleep(period)で
int period = 10;
10msecを設定すれば10msecでカウントアップすることができます

この例ではSystem.currentTimeMillis()を使っていますが
System.nanoTime()の方が精度は高いですね、
ただそれがこの場合必要なのか、コスト高になっていないか等ありますが

投稿2016/12/07 03:12

aja

総合スコア3733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問