空山不空

导航

ProgressBar进度条和ProgressDialog进度框的展示DEMO

在做手机开发时,经常碰到一些比较耗时的操作,这个时候进度条就开始派上用场了。

这个demo展示了ProgressBar进度条和ProgressDialog进度框。

一、ProgressDialog进度框,效果如图所示:

代码如下:

 1 //进度对话框按钮监听
2 class ProssButtonListener implements OnClickListener {
3 @Override
4 public void onClick(View v) {
5 myDialog = ProgressDialog.show(ProgressbarDemo.this, "进度条标题",
6 "进度条内容", true);
7
8 new Thread() {
9 public void run() {
10 try {
11 /* 在这里写上要背景运行的程序片段 */
12 /* 为了明显看见效果,以暂停3秒作为示范 */
13 sleep(3000);
14 } catch (Exception e) {
15 e.printStackTrace();
16 } finally {
17 // 卸载所创建的myDialog对象。
18 myDialog.dismiss();
19 }
20 }
21 }.start(); /* 开始运行运行线程 */
22 }
23 }

二、进度条对话框,这里用两种情况来动态显示进度条刻度

1、handle方法

效果图如下:

代码如下:

 1 //进度条handle按钮监听
2 class ProssBarHandleButtonListener implements OnClickListener {
3 @Override
4 public void onClick(View v) {
5 progressBarHandle.setVisibility(View.VISIBLE);
6 myProssBarhandleText.setVisibility(View.VISIBLE);
7 progressBarHandle.setMax(1000);
8 new Thread() {
9 public void run() {
10 for(int i=0;i<=1000;){
11 try {
12 /* 在这里写上运行的进度条 */
13 Message msg = new Message();
14 msg.what = 1;
15 msg.getData().putInt("size", i);
16 handler.sendMessage(msg);//handle发送消息
17 /* 为了明显看见效果,以暂停1秒作为示范 */
18 sleep(100);
19 i+=10;
20 } catch (Exception e) {
21 handler.obtainMessage(-1).sendToTarget();
22 e.printStackTrace();
23 }
24 }
25 }
26 }.start(); /* 开始运行运行线程 */
27 }
28 }
29
30 //handle接收消息
31 private Handler handler = new Handler(){
32
33 @Override
34 public void handleMessage(Message msg) {
35 switch (msg.what) {
36 case 1:
37 progressBarHandle.setProgress(msg.getData().getInt("size"));
38 float num = (float)progressBarHandle.getProgress()/(float)progressBarHandle.getMax();
39 int result = (int)(num*100);
40 System.out.println("progressBarHandle.getProgress()======="+progressBarHandle.getProgress());
41 myProssBarhandleText.setText(result+ "%");
42 if(progressBarHandle.getProgress()==progressBarHandle.getMax()){
43 Toast.makeText(ProgressbarDemo.this, "下载成功", 1).show();
44 progressBarHandle.setVisibility(View.GONE);
45 myProssBarhandleText.setVisibility(View.GONE);
46 }
47 break;
48
49 case -1:
50 Toast.makeText(ProgressbarDemo.this,"下载失败", 1).show();
51 break;
52 }
53 }
54 };

2、使用AsyncTask方法,效果图与handle效果一样

具体代码如下:

 1 //进度条synctask按钮监听
2 class ProssBarSyncButtonListener implements OnClickListener {
3 @Override
4 public void onClick(View v) {
5 new AsyncLoader().execute((Void)null);
6 }
7 }
8
9
10 //AsyncTask 任务执行
11 class AsyncLoader extends AsyncTask<Void, Integer, Integer> {
12 @Override
13 // 在doInBackground方法执行前执行
14 protected void onPreExecute(){
15 progressBarHandle.setVisibility(View.VISIBLE);
16 myProssBarhandleText.setVisibility(View.VISIBLE);
17 progressBarHandle.setMax(100000);
18 }
19
20 // 做具体的耗时操作
21 protected Integer doInBackground(Void... params) {
22 //这里以1万的进度条刻度来显示
23 int totalSize = 100000;
24 for (int i = 0; i < 100000; ) {
25 publishProgress(i); //通过推送消息传递数据给onProgressUpdate方法执行
26 i+=10;
27 }
28 return totalSize;
29 }
30 // 在doInBackground方法执行过程中执行
31 protected void onProgressUpdate(Integer... progress) {
32 progressBarHandle.setProgress(progress[0]);
33 float num = (float)progressBarHandle.getProgress()/(float)progressBarHandle.getMax();
34 int result = (int)(num*100);
35 myProssBarhandleText.setText(result+ "%");
36 }
37
38 // 在doInBackground方法结束后执行
39 protected void onPostExecute(Integer result) {
40 Toast.makeText(ProgressbarDemo.this, "下载成功,下载了"+result, 1).show();
41 myProssBarhandleText.setVisibility(View.GONE);
42 progressBarHandle.setVisibility(View.GONE);
43 }
44 }

DEMO 代码下载地址:https://files.cnblogs.com/fbsk/proressbardemo.zip




 

posted on 2011-10-31 23:40  空山不空  阅读(6460)  评论(1编辑  收藏  举报