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

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

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

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

Android

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

1回答

2740閲覧

[AndroidJava](ストップウォッチ)一時停止ボタンを押したときに、内部のカウントが止まらない

ShuperDark

総合スコア11

Java

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

Android

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2019/06/03 01:57

編集2022/01/12 10:55

前提・実現したいこと

一時停止ボタン(btn1)を押したとき、今のカウントを記憶しようとして再開したときに、どうしても内部のカウントが進んでしまうので、しっかり途中から再開されるようにしたい。
※たとえば、今のカウント時間が00:00:05.00くらいだとして一時停止ボタンを押したとき心の中で「3秒。。。4秒。。。」と数えて再開すると内部でカウントされて「00:00:09.00」などから始まって、途中からカウントされない。

該当のソースコード

MainActivity.java

Java

1package com.example.kadaitimer; 2 3import java.text.SimpleDateFormat; 4import java.util.Locale; 5import java.util.TimeZone; 6import java.util.Timer; 7import java.util.TimerTask; 8 9import android.app.Activity; 10import android.os.Bundle; 11import android.text.format.DateFormat; 12import android.view.Menu; 13import android.view.MenuItem; 14import android.view.View; 15import android.widget.Button; 16import android.widget.TextView; 17 18public class MainActivity extends Activity { 19 20 private long startTime = System.currentTimeMillis(); 21 22 private long endTime = 0; 23 24 private long diffTime = 0; 25 26 private long saveValue = 0; 27 28 private Button btn1 = null;//一時停止/再開 29 private Button btn2 = null;//初期化 30 31 private TextView time = null; 32 33 private Timer timer = new Timer(); 34 35 private volatile boolean stopRun = false; 36 37 private volatile int flag = 0; 38 39 private SimpleDateFormat dataformat = new SimpleDateFormat("HH:mm:ss.SS", Locale.JAPAN); 40 41 @Override 42 protected void onCreate(Bundle savedInstanceState) { 43 super.onCreate(savedInstanceState); 44 setContentView(R.layout.activity_main); 45 46 btn1 = (Button)findViewById(R.id.button1); 47 btn2 = (Button)findViewById(R.id.button2); 48 49 time = (TextView)findViewById(R.id.textView1); 50 time.setText(dataformat.format(0)); 51 52 final TimerTask task = new TimerTask() { 53 @Override 54 public void run() { 55 56 int period = 10; 57 58 while (!stopRun) { 59 60 try { 61 saveValue = diffTime; 62 Thread.sleep(period); 63 } 64 catch (InterruptedException e) { 65 e.printStackTrace(); 66 stopRun = true; 67 } 68 69 runOnUiThread(new Runnable() { 70 public void run() { 71 if(flag == 2) { 72 diffTime = saveValue; 73 } else { 74 endTime = System.currentTimeMillis(); 75 // カウント時間 = 経過時間 - 開始時間 76 diffTime = (endTime - startTime);//endTime - startTime 77 78 time.setText(dataformat.format(diffTime));//diffTime 79 } 80 } 81 }); 82 } 83 } 84 }; 85 86 timer.schedule(task, 10, 10); 87 88 btn1.setClickable(true); 89 btn1.setOnClickListener(new View.OnClickListener() { 90 91 @Override 92 public void onClick(View v) { 93 94 Thread thread; 95 96 if(stopRun == true) { 97 98 if(flag == 1) { 99 startTime = System.currentTimeMillis(); 100 time.setText(dataformat.format(0)); 101 102 flag = 0; 103 } else if(flag == 2) { 104 time.setText(dataformat.format(0)); 105 106 flag = 0; 107 } 108 109 stopRun = false; 110 111 thread = new Thread(); 112 thread.start(); 113 114 } else { 115 flag = 2; 116 stopRun = true; 117 } 118 } 119 }); 120 121 btn2.setClickable(true); 122 btn2.setOnClickListener(new View.OnClickListener() { 123 124 @Override 125 public void onClick(View v) { 126 flag = 1; 127 128 stopRun = true; 129 startTime = System.currentTimeMillis(); 130 time.setText(dataformat.format(0)); 131 } 132 }); 133 } 134 135 @Override 136 public boolean onCreateOptionsMenu(Menu menu) { 137 // Inflate the menu; this adds items to the action bar if it is present. 138 getMenuInflater().inflate(R.menu.main, menu); 139 return true; 140 } 141 142 @Override 143 public boolean onOptionsItemSelected(MenuItem item) { 144 // Handle action bar item clicks here. The action bar will 145 // automatically handle clicks on the Home/Up button, so long 146 // as you specify a parent activity in AndroidManifest.xml. 147 int id = item.getItemId(); 148 if (id == R.id.action_settings) { 149 return true; 150 } 151 return super.onOptionsItemSelected(item); 152 } 153} 154

試したこと

flagなど変数を作ったり、カウント時間を記憶する変数を作ってみるも、うまくいかず。。。

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

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

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

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

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

guest

回答1

0

startTimeがいじられてないのに、endTimeが現在時刻で更新された状態で表示するので、常に「最初に開始を押した時刻」と「現在時刻」との差を取ってしまいます。
そうしないためには、経過時間を取っておいて、再開するときは改めてstartTimeを取って経過時間に累積させていくといったやり方になるのでしょうか。

投稿2019/06/03 02:19

swordone

総合スコア20649

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

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

ShuperDark

2019/06/03 02:36

ええと。。。コードに表すとどういう感じになるのでしょうか? すいません。。。初心者で。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問