チェスクロック的な時間表示をさせたいなーって思ってたんだけど、時間設定とか秒読みとか切れ負けとか実装するのめんどくさそう。なので経過時間だけ表示させようと思う。
Chronometer
一番簡単なのがこれみたい。デザインとかは今の所どうでもいいのでサクッと作ってしまおう。…と思っていたんだけど、Chronometerはstopしても時間は流れていて、再開した時に止めてた分の時間も表示されてしまうとな?試してないから知らんけど。最初から暗礁に乗り上げてしまったぞ。どうしよう。
java.util.Timer
Javaに元からあるTimerっていうのを使うといいらしい。解説サイトをみてみると、マルチスレッドやらHandlerやら何やら難しい単語が並んでいる…。メインで動いてるプログラムとは別に用意するみたいな…?そんで別で実行した結果を渡したりするのがHandlerみたいな…?やばい、全然分からんぞ。調べてみても、start, stopに関する文章は出てくるけど、一時停止に関する文章は出てこないぞ。どういうことだ。うーんうーん。
java.util.concurrent.ScheduledExecutorService
一時停止する場合、こっちを使うらしい。もっと訳がわからないぞ。schedule, scheduleAtFixedRate, scheduleWithFixedDelayってTimer解説してるとこでも見たけど同じことやってるの?じゃTimerとの違いってなんじゃらほい…。あ、一時停止か。えーもうなんかわかんないよー。
再度Chronometer
なんか一時停止できるっぽい。タップされた時のシステム時間を取っておいて、現システム時間との差を使い、基準時間を設定し直してスタートさせるみたい。おっできそう。
private void setTimer(){ switch(PlayerTurn){ case(BLACK): BlackTimer.setBase(SystemClock.elapsedRealtime() + timeWhenStopped); BlackTimer.start(); timeWhenStopped = WhiteTimer.getBase() - SystemClock.elapsedRealtime(); WhiteTimer.stop(); break; case(WHITE): WhiteTimer.setBase(SystemClock.elapsedRealtime() + timeWhenStopped); WhiteTimer.start(); if(BlackStoneCount + WhiteStoneCount > 5) { timeWhenStopped = BlackTimer.getBase() - SystemClock.elapsedRealtime(); BlackTimer.stop(); } break; } }
できた。黒手番が3手目ぐらいで時間変になってたので2手目以降にtimewhenstoppedに時間代入するようにした。
いつかまたちゃんとしたタイマーにも挑戦してみよう。
コメント