[Android]アプリ開発でタイマー機能(時間計測)を実装する方法

プログラミング Kotlin Android

はじめに

Androidアプリ開発でタイマー機能実装方法を備忘録のためにまとめておりますが、参考になれば幸いです。

この記事では、Androidアプリ開発の際にタイマー機能を実装方法を記載しております。実装にはTimerクラスを活用しております。

この記事では紹介しておりませんが、Timerクラスのscheduleメソッドを使用すれば、一定時間経過ごとに処理を行うことも可能です。

開発環境

  • Android Studio 4.1.1
  • Kotlin 1.4.10

使用する技術

  • Handlerクラス
  • postDelayedメソッド
  • postメソッド
  • removeCallbacksメソッド
  • Timerクラス
  • cancelメソッド

コード

class MainActivity : AppCompatActivity(), View.OnClickListener {

    val handler = Handler()
    var timeValue = 0
    lateinit var timer: Timer

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_calculation)

        runnable = object: Runnable {
            override fun run() {
                timeValue++
                timeText(timeValue)?.let {
                    textViewCalcTime.text = it
                }
                handler.postDelayed(this, 1000)
            }
        }

        startButton.setOnClickListener {
            handler.post(runnable)
        }

        stopButton.setOnClickListener {
            handler.removeCallbacks(runnable)
        }
    }

    override fun onResume() {
        super.onResume()
        timer = Timer()
    }

    override fun onPause() {
        super.onPause()
        timer.cancel()
    }

    private fun timeText(time: Int = 0): String? {
        return if (time < 0) {
            null
        } else if (time == 0) {
            "00:00:00"
        } else {
            val h = time / 3600
            val m = time % 3600 / 60
            val s = time % 60
            "%1$02d:%2$02d:%3$02d".format(h, m, s)
        }
    }
}

コードの説明

  • 3行目
  • Handlerクラスを使用するための準備。
  • クラス内全体で使用するメソッドや変数は、クラス直下に定義する(各メソッドの外)。
  • 4行目
  • 時間情報を格納するためのtimeValue変数を準備。
  • 5行目
  • Timerクラスを使用するための準備。
  • 初期化はOnResumeメソッド内で行うため、lateinit(後で初期化する時の記述)としておく。
  • 11行目
  • タイマー計測をする時の記述。
  • runメソッド内には時間の計測と時間情報の更新、ビューに反映するためのtimeTextメソッドの呼び出しを記述。
  • 21行目
  • ボタンを押すとタイマーが開始。
  • 25行目
  • ボタンを押すとタイマーが停止。
  • 32行目
  • Timerクラスの初期化。
  • 37行目
  • Timerクラスの片付け。
  • 40行目
  • 計測している時間を、表示したいビューに表示するためのメソッド。
  • 引数に時間を情報を、返り値に表示した時間をString型で返す。
  • 41,43行目の処理は、時間情報がうまく受け取れなかった時の処理。
  • 45行目の処理は、受け取った時間情報を時間・分・秒に計算し直して表示する処理。

参考文献

正式採用の「Kotlin」で挑戦! 初めてのAndroidアプリ開発 〜ストップウォッチを作ってみよう〜