05 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 07

ハルシオンシステムの気ままBlog

株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

 

【Java】onClickとUI変更のお話 

はい、もう金曜日ですね。大坂です。

今週もJavaでのアプリ作成のお話です。

クイズアプリなどを作るときに解答ボタンを押して「○」を出して、次の問題になったら「○」を消すみたいなことやりたい時に

@Override
public void onClick(View v) {
// 「○」の画像を描画
imageView.setImageResource(R.drawable.maru);
sleep(1000); // 1秒待つ
nextQuestion(); // 次の問題を作成
// 「○」の画像を消す
marubatu.setImageDrawable(null);
}
public synchronized void sleep(long msec) {
try {
wait(msec);
} catch(InterruptedException e) {
e.printStackTrace();
}
}

とかやっても何も反応してくれません・・・。
調べてみるとUIはUIスレッドでしか変更できないようです。へぇ~(無知)

では、どうするのかというと。Handler#postを使用します。

@Override
public void onClick(View v) {
// ハンドラの生成
final Handler handler = new Handler();
new Thread(new Runnable() {
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
// 「○」の画像を描画
imageView.setImageResource(R.drawable.maru);
}
});
sleep(1000); // 1秒待つ
handler.post(new Runnable() {
@Override
public void run() {
// 「○」の画像を消す
imageView.setImageDrawable(null);
}
});
}
}).start();
}

public synchronized void sleep(long msec) {
try {
wait(msec);
} catch(InterruptedException e) {
e.printStackTrace();
}
}

といった感じですね。上の処理だと「○」を1秒だしてそのあと「○」が消えるという動作になります。
この後に次の問題を出す処理を書いていけばクイズのが作れます!きっと。

勉強不足を実感した瞬間でしたorz

ではでは、また来週(´・ω・)ノシ
スポンサーサイト

Category: 開発日記(Java)

Thread: 日記

Janre: 日記

tb 0 : cm 0   

コメント

コメントの投稿

Secret

トラックバック

トラックバックURL
→http://halcyonsystemblog.blog.fc2.com/tb.php/6-f4a21f4e
この記事にトラックバックする(FC2ブログユーザー)