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


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

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

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

それでは続きをどうぞ

MyCountDownTimerクラスの作成

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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()メソッドを利用します。

1
2
3
4
5
6
7
8
9
10
// インスタンスの生成
final MyCountDownTimer cdt = new MyCountDownTimer(180000, 1000);
 
startBtn.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        // カウントダウン開始
        cdt.start();
    }
});

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

1
2
3
4
5
6
7
cancelBtn.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        // カウントダウン中止
        cdt.cancel();
    }
});

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