こんにちは。Androidアプリ開発を勉強中のものです。
今、自分vsCPUのオセロアプリを作成しており、最低限オセロと呼べるものはできたのですが、描画処理が上手くいかず困っています。
作成したい流れとしては、画面をタッチしたとき
1.自分のターンなら駒を置く
2.描画
3.「数秒待機」
4.CPUの駒を置く
5.描画
のような感じにしたいのですが、3.「数秒待機」がなかなかうまくいかず困っています。
ソースコードだとこんな感じにしたいです
Java
1// カスタムビュー内 2@Override 3public boolean onTouchEvent(MotionEvent event) { 4 if (isPlayerTurn()) { // 自分のターン時のみ処理 5 putPlayerPiece() // 1.自分の駒を置く 6 invalidate(); // 2.描画 7 8 Thread.sleep(1000); // 3.待機 例外処理は省略 9 10 putCPUPiece(); // 4.CPUの駒を置く 11 invalidate(); // 5.描画 12 } 13 return super.onTouchEvent(event); 14}
しかし、invalidate()は呼ばれた瞬間すぐに実行されるわけではないようで、上記のコードだと2の描画が実行されません。
そこまでは分かったのですが、じゃあどうしようかと考えてもいい案が思いつかず困っています。
一応、下記のように別スレッドで実行させれば表示上ではうまくいくのですが、タッチすれば表示の待機を待たずにどんどん置けてしまうので、これも思い通りの実装ではないです
Java
1@Override 2public boolean onTouchEvent(MotionEvent event) { 3 if (isPlayerTurn()) { // 自分のターン時のみ処理 4 putPlayerPiece() // 1.自分の駒を置く 5 invalidate(); // 2.描画 6 7 new Handler().post(() -> { 8 Thread.sleep(1000); // 3.待機 例外処理は省略 9 10 putCPUPiece(); // 4.CPUの駒を置く 11 invalidate(); // 5.描画 12 }); 13 } 14 return super.onTouchEvent(event); 15}
何かいい方法を教えていただけると助かります。よろしくお願いします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/02/07 08:06
2019/02/08 01:50 編集
2019/02/07 19:06
退会済みユーザー
2019/02/08 01:45