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

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回答

308閲覧

[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/05/27 02:06

なにをしているか

今私は学校の課題でAndroidJavaでストップウォッチを作ろうとしています。

直したい場所

初期化ボタン(btn2)を押したとき、00:00:00.00になりますが、その初期化された値で一時停止/再開ボタン(btn1)を押すと、アプリを開いたときにカウントされた途中の値から始まってしまいます。これはどうすればいいのでしょうか?

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 Button btn1 = null;//一時停止/再開 23 private Button btn2 = null;//初期化 24 25 private TextView time = null; 26 27 private Timer timer = new Timer(); 28 29 private volatile boolean stopRun = false; 30 31 private SimpleDateFormat dataformat = new SimpleDateFormat("HH:mm:ss.SS", Locale.JAPAN); 32 33 @Override 34 protected void onCreate(Bundle savedInstanceState) { 35 super.onCreate(savedInstanceState); 36 setContentView(R.layout.activity_main); 37 38 btn1 = (Button)findViewById(R.id.button1); 39 btn2 = (Button)findViewById(R.id.button2); 40 41 time = (TextView)findViewById(R.id.textView1); 42 time.setText(dataformat.format(0)); 43 44 final TimerTask task = new TimerTask() { 45 @Override 46 public void run() { 47 48 int period = 10; 49 50 while (!stopRun) { 51 52 try { 53 Thread.sleep(period); 54 } 55 catch (InterruptedException e) { 56 e.printStackTrace(); 57 stopRun = true; 58 } 59 60 runOnUiThread(new Runnable() { 61 public void run() { 62 long endTime = System.currentTimeMillis(); 63 // カウント時間 = 経過時間 - 開始時間 64 long diffTime = (endTime - startTime);//endTime - startTime 65 66 time.setText(dataformat.format(diffTime));//diffTime 67 } 68 }); 69 } 70 } 71 }; 72 73 timer.schedule(task, 10, 10); 74 75 btn1.setClickable(true); 76 btn1.setOnClickListener(new View.OnClickListener() { 77 78 @Override 79 public void onClick(View v) { 80 Thread thread; 81 82 if(stopRun == true) { 83 84 stopRun = false; 85 86 thread = new Thread(); 87 thread.start(); 88 89 } else { 90 stopRun = true; 91 92 } 93 } 94 }); 95 96 btn2.setClickable(true); 97 btn2.setOnClickListener(new View.OnClickListener() { 98 99 @Override 100 public void onClick(View v) { 101 stopRun = true; 102 time.setText(dataformat.format(0)); 103 } 104 }); 105 } 106 107 @Override 108 public boolean onCreateOptionsMenu(Menu menu) { 109 // Inflate the menu; this adds items to the action bar if it is present. 110 getMenuInflater().inflate(R.menu.main, menu); 111 return true; 112 } 113 114 @Override 115 public boolean onOptionsItemSelected(MenuItem item) { 116 // Handle action bar item clicks here. The action bar will 117 // automatically handle clicks on the Home/Up button, so long 118 // as you specify a parent activity in AndroidManifest.xml. 119 int id = item.getItemId(); 120 if (id == R.id.action_settings) { 121 return true; 122 } 123 return super.onOptionsItemSelected(item); 124 } 125} 126

activity_main.xml

XML

1<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:paddingBottom="@dimen/activity_vertical_margin" 6 android:paddingLeft="@dimen/activity_horizontal_margin" 7 android:paddingRight="@dimen/activity_horizontal_margin" 8 android:paddingTop="@dimen/activity_vertical_margin" 9 tools:context="com.example.kadaitimer.MainActivity" > 10 11 <Button 12 android:id="@+id/button1" 13 android:layout_width="200dp" 14 android:layout_height="50dp" 15 android:layout_marginTop="250dp" 16 android:layout_marginLeft="40dp" 17 android:text="一時停止/再開" 18 /> 19 20 <Button 21 android:id="@+id/button2" 22 android:layout_width="200dp" 23 android:layout_height="50dp" 24 android:layout_marginTop="300dp" 25 android:layout_marginLeft="40dp" 26 android:text="初期化" 27 /> 28 29 <TextView 30 android:id="@+id/textView1" 31 android:layout_width="280dp" 32 android:layout_height="60dp" 33 android:layout_marginTop="100dp" 34 android:layout_marginLeft="15dp" 35 android:text="00:00:00.00" 36 android:textStyle="bold" 37 android:textSize="50dp" 38 /> 39</RelativeLayout> 40

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

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

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

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

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

guest

回答1

0

ベストアンサー

カウント時間を算出するためのstartTimeを、btn2クリック時に更新してください。

投稿2019/05/27 02:13

dsuzuki

総合スコア1682

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

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

ShuperDark

2019/05/27 02:47

回答ありがとうございます。 たしかに途中の値から始まらなくはなりましたが、初期化してすぐbtn1を押したら見た目は00:00:00.00から始まったように見えますが、どうやら初期化してbtn1を押さなくても内部のカウントは進んでしまっているようです。。。
dsuzuki

2019/05/28 11:13

カウントを止める処理がないからです。 System.currentTimeMillis();を利用しているので、stopRunで画面更新を停止させても、システム時刻は経過します。 今のソースを生かしつつ一時停止を実現するなら、一時停止中の経過時間を算出し、画面表示するときに一時停止の経過時間を加算したらどうでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問