2010年9月24日金曜日

androidのタイトルバーにプログレスバー



androidのアプリケーションのタイトルバーに
プログレスバーを表示する方法についてメモを取っておく。
基本的に、画面描画はメインスレッドに処理をさせなければいけないので、
mHandler.postを利用している。


import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.Window;
import android.widget.ProgressBar;

public class MainActivity extends Activity {
private Handler mHandler = new Handler();
private int mTotal;
private int mRemain;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_PROGRESS);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.main);

/* showProgressはButton */
findViewById(R.id.showProgress).setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
start();
}
});
start();
}

private void start() {
setProgressBarIndeterminate(false);
setProgressBarVisibility(true);
setProgressBarIndeterminateVisibility(true);

new Thread(new Runnable() {
public void run() {
mTotal = 100;
mRemain = mTotal;
do {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
mRemain--;

mHandler.post(new Runnable() {
public void run() {
setProgress((mTotal-mRemain)*100);
}
});

} while (mRemain> 0);
}
}).start();
}
}



別スレッドで、50msec寝て画面描画要求をメインスレッドのハンドラー経由で
行っているだけ。
ボールドさせているところが、プログレスバーの表示部分で
イタリックになっているところが、メインスレッドに描画処理をさせているところ。

0 件のコメント:

コメントを投稿