Идея в том, чтобы сделать шахматные часы. Но проблема заключается в возобновлении приостановленного экземпляра CountDownTimer без сброса или создания нового.
Первое действие - это прикосновение к «белой кнопке», и вызывается метод «startTimerBlack»: запускается черный таймер,таймер белого приостановлен.
При касании «черной кнопки» вызывается «startTimerWhite»: запускается таймер белого, пауза черного таймера.
При повторном нажатии белой кнопкичерный таймер должен возобновиться, но это не так.
class MainActivity : AppCompatActivity() {
enum class TimerState {
Stopped, Paused, Running
}
private lateinit var timerWhite: CountDownTimer
private lateinit var timerBlack: CountDownTimer
private var timerStateWhite = TimerState.Stopped
private var timerStateBlack = TimerState.Stopped
private var secondsRemaining = 0L
override fun onCreate(savedInstanceState: Bundle?) {
requestWindowFeature(Window.FEATURE_NO_TITLE)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
buttonWhite.setOnClickListener { v ->
println("white")
startTimerBlack()
}
buttonBlack.setOnClickListener { v ->
println("black")
startTimerWhite()
}
}
private fun startTimerWhite() {
if(timerStateBlack != TimerState.Stopped) {
timerBlack.cancel()
timerStateBlack = TimerState.Paused
}
timerStateWhite = TimerState.Running
timerWhite = object : CountDownTimer(1000 * 1000, 1000) {
override fun onTick(millisUntilFinished: Long) {
secondsRemaining = millisUntilFinished / 1000
buttonWhite.text = secondsRemaining.toString()
}
override fun onFinish() {}
}.start()
}
private fun startTimerBlack() {
if(timerStateWhite != TimerState.Stopped) {
timerWhite.cancel()
timerStateWhite = TimerState.Paused
}
timerStateBlack = TimerState.Running
timerBlack = object : CountDownTimer(secondsRemaining, 1000) {
override fun onTick(millisUntilFinished: Long) {
secondsRemaining = millisUntilFinished / 1000
buttonBlack.text = secondsRemaining.toString()
}
override fun onFinish() {
}
}.start()
}
}