ProgressDialogを使用してみましょう。
ProgressDialogは何かを読み込む時や通信を行う時に処理の進捗を伝える事に利用をします。
ただ、ProgressionDialogでは処理を行う際に一時的なものではなく、開始や終了など、
数秒にわたっての処理になるために、アプリが停止した場合などの処理を考えておく必要があります。
2018年追記
見た目は設定しているthemeによりますので、最新のthemeを使えば、最新の見た目になります。
プログレスを表示する場合には、この形式を用いるのですが、短い場合にはローディングを出すだけのダイアログでプログレスをお出さない方が見た目にもすっきるする事が多いです。
progressDialog = new ProgressDialog(this); progressDialog.setTitle("タイトル"); progressDialog.setMessage("テキスト"); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.setCancelable(false); progressDialog.show();
こんな感じ、終わったらdismissすればいいのでよっぽど長い場合以外にはこれだけで対応させてしまう方が多いかもです。
以前の記事
つまり、読み込み完了後に負荷のかかる動作であれば一度読み込みをキャンセルした方がいいし、
読み込みが完了したら、次(にアプリ立ち上げ時)からその データを利用できるようにしたいのであれば、処理を継続するべきです。
ですが、ユーザーがその動作を取りやめているので、
キャンセルにして次回に立ち上げ た際にはキャンセルされた状態からスタートとなるのがよいようです。
今回はprogressの管理にThreadを用いて、擬似的にprogressを行います。
progressPracticeというprojectを作成してください。
今回は、stringをいくつか利用をするので、projectを作成した際にデフォルトで存在している定数を利用して作成をします。
Threadにはrunnableを設定する事でthread内で動作するファンクションを設定できます。
package in.andante.android.progress; import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.os.Handler; public class ProgressPractice extends Activity { private ProgressDialog _dialog; private Thread _thread; private Runnable _runnable; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); _runnable = new Runnable() { @Override public void run() { // TODO Auto-generated method stub for(int i =0 ; i < 100 ; i++){ if(_thread == null)return; try{ Thread.sleep(100); }catch(Exception e){} _dialog.incrementProgressBy(1); } _dialog.dismiss(); _thread = null; } }; startProgress(); } private void startProgress(){ _dialog = new ProgressDialog(this); _dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); _dialog.setTitle(R.string.app_name); _dialog.setMessage(getString(R.string.hello)); _dialog.setCancelable(false); _dialog.setMax(100); _dialog.setProgress(0); _dialog.show(); _thread = new Thread(_runnable); _thread.start(); } public void onPause(){ super.onPause(); _dialog.dismiss(); _thread = null; } }
上記の形で、100ミリ秒に一度1%ずつ伸びていきます。
_dialog.setMax(100); _dialog.setProgress(0);
上記で、最大の値の決定ができます。(下は最初の値)
また、
_dialog.incrementProgressBy(1);
で値を1%づつふやします。(正確にはMAX分の1)
_dialog.dismiss();
で処理を終わらせます。
今回は処理の最中に、閉じるや、他のアプリケーションが動くなどした場合(onPause)でこの処理を中断するように設定を行いました。