CountDownTimerを利用してタイマー機能を実装する


Androidでは、CountDownTimerを用いて、簡単にタイマー機能を実装することが可能です。 ポイントは以下の二つです。

  • コールバック関数を実装したCountDownTimerを継承したクラスの作成
  • カウントダウンの開始と中止メソッドの実装

今回は、ボタンを押すと3分間のカウントダウンを開始するサンプルアプリを例に、タイマー機能の実装方法を解説します。

それでは続きをどうぞ

MyCountDownTimerクラスの作成

CountDownTimerクラスを利用するには、CountDownTimerクラスを継承したクラス(ここではMyCountDownTimer)を作成します。

MyCountDownTimerクラスには、2つのコールバックメソッドを実装します。

onTick() 指定したインターバル毎に呼ばれる
onFinish() カウントダウン終了後に呼ばれる

実装後のソ−スコードは以下の通りです。

    public class MyCountDownTimer extends CountDownTimer{

    	public MyCountDownTimer(long millisInFuture, long countDownInterval) {
    		super(millisInFuture, countDownInterval);

    	}

    	@Override
    	public void onFinish() {
    		// カウントダウン完了後に呼ばれる
    		timerView.setText("0");
    		Toast.makeText(getApplicationContext(), "タイマー満了", Toast.LENGTH_SHORT).show();
    	}

    	@Override
    	public void onTick(long millisUntilFinished) {
    		// インターバル(countDownInterval)毎に呼ばれる
    		timerView.setText(Long.toString(millisUntilFinished/1000/60) + ":" + Long.toString(millisUntilFinished/1000%60));
    	}
    }

MyCountDownTimerの第一引数(millisInFuture)はカウントダウンの開始値を、第2引数(countDownInterval)は何秒毎にカウントダウンを行うかのインターバルをそれぞれ指定します。 onTick()は、第2引数に指定したインターバル毎に呼ばれるため、ここで分秒を「○○:○○」の形式で表示するようにします。
onTIck()の引数にはミリ秒単位で数値が渡されてくるので、分秒への変換時に注意が必要です。

onFinish()は、カウントダウンが終了した際に呼ばれます。
今回は、3分間のカウントダウンの終了と同時に、トーストでタイマーの満了を表示するようにしています。

カウントダウンとの開始と中止を行う

MyCountDownTimerが実装できたら、あとはカウントダウンの開始を行います。
カウントダウンの開始には、start()メソッドを利用します。

        // インスタンスの生成
        final MyCountDownTimer cdt = new MyCountDownTimer(180000, 1000);

        startBtn.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				// カウントダウン開始
				cdt.start();
			}
        });

インスタンス生成時の引数には、カウントダウンの開始値(180秒)とインターバル(1秒)を、それぞれミリ秒単位で渡します。
カウントダウンの中止を行うには、同じようにcancel()メソッドを利用します。

        cancelBtn.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				// カウントダウン中止
				cdt.cancel();
			}
        });

以上で、下図のような、カウントカウントダウンを行うアプリの完成です。