2012年05月17日

スタート・ストップ・リスタートを備えたカウントダウンタイマー


前回カウントダウンのスタートとストップボタンのみ実装しました
ですがこれではstopで止めたらまた最初からスタートしかできません
前回のをベースに途中中断した時用にリスタートボタンを実装したいと思います
カウントダウンタイマーを作成する

まずはボタンを追加するためmain.xmlを変更します
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0:00" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="start" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="stop" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="restart" />
    
</LinearLayout>

次にMainActivity.javaを変更します
リスタートボタンを押したときの動作に
(1)その時の残り時間を取得する
(2)取得した残り時間を“分”と“秒”に分け秒に統一する
(3)統一した秒をミリ秒に変換しそれを初期値にスタートさせる
の3段階を追記します

MainActivity.java
package blog.test;
 
import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
 
public class MainActivity extends Activity {
	TextView timer;
	Button start,stop,restart;
	private MyCountDownTimer cdt ;
	@Override
	  protected void onCreate(Bundle savedInstanceState) {
	    super.onCreate(savedInstanceState);
	    setContentView(R.layout.main); 
	    timer = (TextView)findViewById(R.id.textView1);
	    start =(Button)findViewById(R.id.button1);
	    stop =(Button)findViewById(R.id.button2);
	    restart =(Button)findViewById(R.id.button3);
	    
	    start.setOnClickListener(new View.OnClickListener() {

	        public void onClick(View v) {
	    	    //CountDownの初期値
	        	cdt = new MyCountDownTimer(180000, 1000); 
	            // カウントダウン開始
	            cdt.start();
	        }
	    });
	    

	    stop.setOnClickListener(new OnClickListener(){
	        public void onClick(View v) {
	            // カウントダウン中止
	            cdt.cancel();
	        }
	    });
	    
	    restart.setOnClickListener(new OnClickListener(){
	        public void onClick(View v) {
	            //中止したtimeを取得
	            String time = timer.getText().toString();
	            //timeを分と秒に分ける
	            String[] time2 = time.split(":", 0);
	            //止めたところからリスタートする
	            cdt = new MyCountDownTimer((Integer.parseInt(time2[0])*60+Integer.parseInt(time2[1]))*1000, 1000);
	            cdt.start();
	        }
	    });
	}	
	
	
	
	public class MyCountDownTimer extends CountDownTimer{

	    public MyCountDownTimer(long millisInFuture, long countDownInterval) {
	        super(millisInFuture, countDownInterval);
	 
	    }
	 
	    @Override
	    public void onFinish() {
	        // カウントダウン完了後に呼ばれる
	        timer.setText("0");
	        Toast.makeText(getApplicationContext(), "終了", Toast.LENGTH_LONG).show();
	    }
	 
	    @Override
	    public void onTick(long millisUntilFinished) {
	        // インターバル(countDownInterval)毎に呼ばれる
	        timer.setText(Long.toString(millisUntilFinished/1000/60) + ":" + Long.toString(millisUntilFinished/1000%60));
	    }
	}
}

String time = timer.getText().toString();の部分で残り時間を取得
String[] time2 = time.split(":", 0);の部分で“:”を基準に文字を分割
これでtime[0]に分が、time[1]に秒が入ります
これを数値変換してやりstartさせることによりリスタートとしています

スタートボタンを押すとカウントダウンが始まり
device108.png

ストップボタンで一時停止します
device109.png

そしてリスタートボタンでそのタイムから再びスタートさせることができます
device110.png
スポンサードリンク

posted by kenken at 17:24 | Comment(0) | TrackBack(0) | タイマー カウントダウン | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。