アクティビティ
package net.asasvata.stopwatchex;
import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.widget.Chronometer;
public class StopWatchExActivity extends Activity {
private Chronometer chronometer;
private boolean pauseFlag;
private boolean stopFlag;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
chronometer = (Chronometer)findViewById(R.id.chronometer);
pauseFlag = false;
stopFlag = true;
}
public void onClickStart(View view) {
if (stopFlag) {
chronometer.setBase(SystemClock.elapsedRealtime());
chronometer.start();
stopFlag = false;
}
if (pauseFlag) {
chronometer.start();
pauseFlag = false;
}
}
public void onClickStop(View view) {
chronometer.stop();
stopFlag = true;
pauseFlag = false;
}
public void onClickPause(View view) {
chronometer.stop();
pauseFlag = true;
}
public void onClickRestart(View view) {
if (stopFlag || pauseFlag) {
//一時停止していた時間を取得
int stoppedMilliseconds = 0;
String chronoText = chronometer.getText().toString();
String array[] = chronoText.split(":");
if (array.length == 2) {
stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 1000
+ Integer.parseInt(array[1]) * 1000;
} else if (array.length == 3) {
stoppedMilliseconds = Integer.parseInt(array[0]) * 60 * 60 * 1000
+ Integer.parseInt(array[1]) * 60 * 1000
+ Integer.parseInt(array[2]) * 1000;
}
chronometer.setBase(SystemClock.elapsedRealtime() - stoppedMilliseconds);
chronometer.start();
stopFlag = false;
pauseFlag = false;
}
}
}
レイアウト
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Chronometer
android:id="@+id/chronometer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="20px">
</Chronometer>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/startButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/start_button"
android:onClick="onClickStart">
</Button>
<Button
android:id="@+id/stopButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/stop_button"
android:onClick="onClickStop">
</Button>
<Button
android:id="@+id/pauseButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/pause_button"
android:onClick="onClickPause">
</Button>
<Button
android:id="@+id/restartButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/restart_button"
android:onClick="onClickRestart">
</Button>
</LinearLayout>
</LinearLayout>
string.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, StopWatchExActivity!</string>
<string name="app_name">StopWatchEx</string>
<string name="start_button">start</string>
<string name="stop_button">stop</string>
<string name="pause_button">pause</string>
<string name="restart_button">restart</string>
</resources>
Hello World消すのわすれてますが、まあ、まあ。
resetbuttonつけてないのも、まあ、まあ。
大体で。
startとrestart、stopとpauseの違い。
chronometerは、stopしただけだと裏で動きつづけます。
で、
pause→startだと、resetしないで裏で動いてたとこから、続けます。
stop→startだと、resetして0から始めます。
ほいで、
pause or stop→restartで、裏で動いてた時間をひいて、
つまり、表示されてるとこから、続けます。
そんだけ。秒単位の表示が、なんかねー。
handlerとか使うべきかも。
まあ、気が向いたら挑戦します。
0 件のコメント:
コメントを投稿