1 package com.example.flexd8;
2
3 import android.os.Bundle;
4 import android.os.Handler;
5 import android.os.Message;
6 import android.app.Activity;
7 import android.view.Menu;
8 import android.view.View;
9 import android.view.View.OnClickListener;
10 import android.widget.Button;
11 import android.widget.ProgressBar;
12 import android.widget.TextView;
13
14 public class MainActivity extends Activity {
15
16 private TextView tv1;
17 private Button bt1;
18 private ProgressBar pb1;
19 private ProgressBar pb2;
20
21 //进度计数
22 public int progressCounter = 0;
23 //信号常量
24 private static final int MSG_STOP_NOTIFIER = 1;
25 private static final int MSG_THREADING_NOTIFIER = 2;
26
27 @Override
28 protected void onCreate(Bundle savedInstanceState) {
29 super.onCreate(savedInstanceState);
30 setContentView(R.layout.activity_main);
31
32 //Widgets
33 tv1 = (TextView)findViewById(R.id.tv1);
34 bt1 = (Button)findViewById(R.id.bt1);
35 pb1 = (ProgressBar)findViewById(R.id.pb1);
36 pb2 = (ProgressBar)findViewById(R.id.pb2);
37
38 //进度条不明确为false,即有明确进度
39 //不明确就是滚动条的当前值自动在最小到最大值之间来回移动,形成这样一个动画效果,这个只是告诉别人我正在工作
40 //明确就是根据你的进度可以设置现在的进度值
41 pb1.setIndeterminate(false);
42 pb2.setIndeterminate(false);
43
44 //Listener
45 bt1.setOnClickListener(btListener);
46 }
47
48 /**
49 * Listener
50 */
51 OnClickListener btListener = new OnClickListener() {
52 @Override
53 public void onClick(View v) {
54 tv1.setText("processing... ... ");
55 //显示ProgressBar,设置满值进度,初始化进度
56 pb1.setVisibility(View.VISIBLE);
57 pb1.setMax(100);
58 pb1.setProgress(0);
59 pb2.setProgress(0);
60 progressCounter = 0;
61 new Thread(new Runnable() {
62 public void run() {
63 //0-9,10次轮询,每次10%
64 for(int i=0;i<10;i++){
65 try {
66 progressCounter = (i+1)*10;//每次10%
67 Thread.sleep(1000);
68 if(9==i){//满100%
69 Message msg = new Message();
70 msg.what = MSG_STOP_NOTIFIER;
71 myHandler.sendMessage(msg);
72 }else{
73 Message msg = new Message();
74 msg.what = MSG_THREADING_NOTIFIER;
75 myHandler.sendMessage(msg);
76 }
77
78 } catch (InterruptedException e) {
79 // TODO Auto-generated catch block
80 e.printStackTrace();
81 }
82 }//for
83 }
84 }).start();
85 }
86 };
87
88 /**
89 * Handler处理消息
90 */
91 Handler myHandler = new Handler(){
92 @Override
93 public void handleMessage(Message msg) {
94 switch(msg.what){
95
96 case MSG_STOP_NOTIFIER:
97 //得到终止的消息,隐藏ProgressBar,中断线程
98 tv1.setText("Mission Complete!");
99 pb1.setVisibility(View.GONE);
100 Thread.currentThread().interrupt();
101 break;
102
103 case MSG_THREADING_NOTIFIER:
104 //得到持续执行的消息,设置ProgressBar进度
105 //if(!Thread.currentThread().isInterrupted()){
106 tv1.setText(String.valueOf(progressCounter) + "% processing");
107 pb1.setProgress(progressCounter);
108 pb2.setProgress(progressCounter);
109 //}
110 break;
111 }
112 super.handleMessage(msg);
113 }
114 };
115
116 @Override
117 public boolean onCreateOptionsMenu(Menu menu) {
118 // Inflate the menu; this adds items to the action bar if it is present.
119 getMenuInflater().inflate(R.menu.activity_main, menu);
120 return true;
121 }
122
123 }