ホームへ戻る

5.3 進捗バーを表示する


 先ほどのダイアログでは、どれ位処理が出来たのか分かりませんでした。
本節では、現在何%処理したか、リアルタイムでプログレスバーを表示するようなプログラムを作ってみます。

基本的な部分はほとんど変わりませんが、handlerを使って進捗率を渡している所が違います。


public class AndroidsCastleActivity extends Activity implements Runnable {
        private ProgressDialog _progressDialog;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                _progressDialog = new ProgressDialog(this);
                _progressDialog.setTitle("レンダリング中");
                _progressDialog.setMessage("しばらくお待ちください...");
                _progressDialog.setIndeterminate(false); // 進捗が分かることを示す
                _progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);// プログレスバータイプ
                _progressDialog.setMax(100); // 最大100にする
                _progressDialog.show(); // 表示開始

                Thread thread = new Thread(this);
                thread.start();
        }

        public void run() {
                for (int i = 0; i < 100; i++) {
                        handler.sendMessage(Message.obtain(handler, i)); // iをhandleMessageに送る
                        try {
                                Thread.sleep(100);
                        } catch (InterruptedException e) {
                        }
                }
                handler.sendMessage(Message.obtain(handler, -1));// -1なら終了の合図
        }

        private Handler handler = new Handler() {
                public void handleMessage(Message msg) {
                        if (msg.what == -1) {// -1なら終了の合図
                                _progressDialog.dismiss(); // ダイアログの終了
                                return;
                        }
                        _progressDialog.setProgress(msg.what);// もらった値を進捗率にセットする
                }
        };
}


実行結果


100回に分けて進捗率をhandlerに渡しています。
仕組みは先ほどとほとんど一緒ですね。

→分からないことがあれば掲示板で質問して下さい


Portions of this page are modifications based on work created and shared by Google and used according to terms described in the Creative Commons 3.0 Attribution License.

- Remical Soft -