FC2ブログ
    09 «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.31.» 11

    ハルシオンシステムの気まま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.jp/tb.php/6-f4a21f4e
    この記事にトラックバックする(FC2ブログユーザー)