2010-12-15

StopWatchっぽい物を作ってみた

作ってみました。参考はこちら。というか、まあ、なんというか。

アクティビティ


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 件のコメント:

コメントを投稿