[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行目の処理は、受け取った時間情報を時間・分・秒に計算し直して表示する処理。