ProgressBar作用是在界面上显示一个进度条。
用法也很简单,代码如下:
<ProgressBar
android:id="@+id/progressbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal" //设置进度条的样式为水平进度条(默认为圆形进度条)
android:max="100" //设置一个最大值
/>
android:id="@+id/progressbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal" //设置进度条的样式为水平进度条(默认为圆形进度条)
android:max="100" //设置一个最大值
/>
提到进度条就要提到android控件里面的可见属性:visibility,这个属性下面有3个可选值:
1.VISIBLE 表示控件是可见的(默认)
2.INVISIBLE 表示控件是不可见的(仍然占据着原来的空间)
3.GONE 表示控件是不可见的(不再占据任何屏幕空间)
下面就通过一个例子来详细说明一下:
public class MainActivity extends AppCompatActivity {
private Button buttonOne;
private ProgressBar progressBar;
private Handler handler;
private TimerTask task; //这是一个抽象类
private Timer timer; //定义一个定时器 Timer是一个普通的类,里面有几个方法
private int progress = 0; //初始化进度条的值
private boolean isfull = false; //用来判断进度条是否已经读取完
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
private Button buttonOne;
private ProgressBar progressBar;
private Handler handler;
private TimerTask task; //这是一个抽象类
private Timer timer; //定义一个定时器 Timer是一个普通的类,里面有几个方法
private int progress = 0; //初始化进度条的值
private boolean isfull = false; //用来判断进度条是否已经读取完
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonOne = (Button)findViewById(R.id.buttonOne);
progressBar = (ProgressBar)findViewById(R.id.progressbar);
timer = new Timer();
buttonOne.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
buttonOne.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
timer.schedule(task,0,100); //每0.1秒执行一次
/*
上面的函数的原形是这样子的:timer.schedule(new TimerTask(){ void run()},0, 100);
第一个参数是 TimerTask类的对象 ,我们实现TimerTask的run()方法就是要周期执行的任务;
第二个参数两种类型,第一种是long类型,表示多长时间后开始执行,另一种是Date类型,表示从那个时间后开始执行;“0”则表示无延迟
第三个参数就是执行的周期,为long类型。
*/
}
});
//用handler对象里面的handleMessage方法来进行消息处理.
handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what){
case 0x001:
progressBar.setVisibility(View.VISIBLE); //设置进度条为可见
buttonOne.setVisibility(View.INVISIBLE); //设置按钮为隐藏
progressBar.setProgress(progress); //改变进度条的值
break;
case 0x002:
progressBar.setVisibility(View.GONE); //删除进度条
buttonOne.setVisibility(View.VISIBLE); //设置按钮为可见
task.cancel(); //结束线程
timer.cancel();
Toast.makeText(MainActivity.this,"加载完成",Toast.LENGTH_LONG).show();
break;
}
}
};
task = new TimerTask() {
public void run() {
if (!isfull){
if (progress < 100){
progress++;
}
});
//用handler对象里面的handleMessage方法来进行消息处理.
handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what){
case 0x001:
progressBar.setVisibility(View.VISIBLE); //设置进度条为可见
buttonOne.setVisibility(View.INVISIBLE); //设置按钮为隐藏
progressBar.setProgress(progress); //改变进度条的值
break;
case 0x002:
progressBar.setVisibility(View.GONE); //删除进度条
buttonOne.setVisibility(View.VISIBLE); //设置按钮为可见
task.cancel(); //结束线程
timer.cancel();
Toast.makeText(MainActivity.this,"加载完成",Toast.LENGTH_LONG).show();
break;
}
}
};
task = new TimerTask() {
public void run() {
if (!isfull){
if (progress < 100){
progress++;
//发送消息
handler.sendEmptyMessage(0x001);
}else{
handler.sendEmptyMessage(0x002);
}
}
}
};
}
}
handler.sendEmptyMessage(0x001);
}else{
handler.sendEmptyMessage(0x002);
}
}
}
};
}
}
运行效果如下:
1.进入界面进度条,按钮均为可见状态。
2.点击按钮,按钮隐藏,进度条每0.1秒涨1%(最大值为100,每次执行时+1)
3.进度条读取完成时,进度条消息(位置也不存在了),按钮再次为可见
有什么不好的地方,希望大家能说出来,你的指出,就是我的进步。
最后附上一个网址,对android消息处理机制不熟的人可以去看看:
http://www.cnblogs.com/codingmyworld/archive/2011/09/14/2174255.html