リバーシで時間表示したい

チェスクロック的な時間表示をさせたいなーって思ってたんだけど、時間設定とか秒読みとか切れ負けとか実装するのめんどくさそう。なので経過時間だけ表示させようと思う。

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に時間代入するようにした。

いつかまたちゃんとしたタイマーにも挑戦してみよう。

参考

https://so-zou.jp/mobile-app/tech/android/ui/widget/view/text-view/chronometer/

https://techbooster.org/android/application/934/

https://ameblo.jp/vegetable-it/entry-11245144566.html

http://www.02.246.ne.jp/~torutk/javahow2/timer.html

https://blog.mumei-himazin.info/?p=474

https://stackoverflow.com/questions/5594877/android-chronometer-pause

カテゴリー: したい タグ: , , , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です