package com.myprogressbarview;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ProgressBar;
public class MainActivity extends Activity {
private ProgressBar oneProgressBar;
private ProgressBar twoProgressBar;
private Button button;
/*
* 自定义Handler信息代码,用以作为标识事件处理
* 在类成员变量中声明了两个整数:GUI_STOP_NOTIFIER与GUI_THREADING_NOTIFIER,
* 这两个整数将作为信息传递出来时的信号标识,前者为当Thread需要喊停的时候处理,后者为进程正在运行过程中所需处理的标识。
*/
protected static final int GUI_STOP_NOTIFIER = 0x108;
protected static final int GUI_THREADING_NOTIFIER = 0x109;
private int onCounter = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置窗口模式,,因为需要显示进度条在标题栏
requestWindowFeature(Window.FEATURE_PROGRESS);
setProgressBarVisibility(true);
setContentView(R.layout.activity_main);
oneProgressBar = (ProgressBar) findViewById(R.id.progressBar1);
twoProgressBar = (ProgressBar) findViewById(R.id.progressBar2);
button = (Button) findViewById(R.id.button1);
// 调用setIndeterminate方法赋值indeterminate模式为false,不明确(false)就是滚动条的当前值自动在最小到最大值之间来回移动
oneProgressBar.setIndeterminate(false);
twoProgressBar.setIndeterminate(false);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO 自动生成的方法存根
//设置ProgressBar可见状态
oneProgressBar.setVisibility(View.VISIBLE);
twoProgressBar.setVisibility(View.VISIBLE);
//设置ProgressBar最大值
oneProgressBar.setMax(100);
//设置progressBar当前值
oneProgressBar.setProgress(0);
twoProgressBar.setProgress(0);
//通过线程改变ProgressBar的值
new Thread(new Runnable() {
@Override
public void run() {
// TODO 自动生成的方法存根
for(int i=0; i<10; i++){
try{
/* 成员变量,用以识别加载进度 */
onCounter = (i+1)*20;
/* 每运行一次循环,即暂停1秒 */
Thread.sleep(1000);
/* 当Thread运行5秒后显示运行结束 */
if(i==4){
/* 以Message对象,传递参数给Handler */
Message m = new Message();
/* 以what属性指定User自定义 */
m.what = MainActivity.GUI_STOP_NOTIFIER;
MainActivity.this.handler.sendMessage(m);
break;
}else{
Message m = new Message();
m.what = MainActivity.GUI_THREADING_NOTIFIER;
MainActivity.this.handler.sendMessage(m);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}).start();
}
});
}
/* Handler构建之后,会监听传来的信息代码 */
Handler handler = new Handler(){
public void handleMessage(Message mag){
switch(mag.what){
//ProgressBar已是最大值
case MainActivity.GUI_STOP_NOTIFIER:
/* 设置ProgressBar Widget为隐藏 */
oneProgressBar.setVisibility(View.GONE);
twoProgressBar.setVisibility(View.GONE);
Thread.currentThread().interrupt();
break;
/* 当取得标识为持续在进程当中时所取得的信息 */
case MainActivity.GUI_THREADING_NOTIFIER:
if(!Thread.currentThread().isInterrupted()){
//改变ProgressBar的当前值
oneProgressBar.setProgress(onCounter);
twoProgressBar.setProgress(onCounter);
// 设置标题栏中前景的一个进度条进度值
setProgress(onCounter * 100);
// 设置标题栏中顶部的一个进度条进度值
setSecondaryProgress(onCounter * 50);
}
break;
}
super.handleMessage(mag);
}
};
}