ProgressBar 进度条
属性:
style:@android:style/widget.ProgressBar.Horizatal
max:总刻度
progress:当前进度
说明:
Android 4.0后 ,主线程不允许做耗时操作,所有耗时操作放在子线程完成
一般来讲,涉及到进度条的实现都要放在子线程完成!!!
子线程 不能更新UI(textview、imageview等控件赋值、listview等使用、弹吐司)
消息处理机制:借用Handler推送消息
备注:所有和进度条有关的组件,更新ui可以在子线程完成!!!
.xml布局
<ProgressBar
android:id="@+id/pro"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_centerInParent="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/pro"
android:layout_centerHorizontal="true"
android:layout_marginTop="14dp"
android:textSize="38dp"
android:text="22" />
//更新进度条进度:常用的两种方法( 将要更新ui的语句放在里面完成放在runOnUIThread(Runnable子类对象))
public class MainActivity extends ActionBarActivity {
private ProgressBar pro;//获取ProgressBar控件
private TextView tt;//用于显示说明进度条信息的控件
private Timer timer;
private int i;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pro = (ProgressBar) findViewById(R.id.pro);
tt = (TextView) findViewById(R.id.tt);
// method1();
method2();
}
//方法二
private void method2() {
// TODO Auto-generated method stub
new Thread(){
@Override
public void run() {
for (i = 0; i <= pro.getMax(); i++) {
pro.setProgress(i);
runOnUiThread( new Runnable() {
public void run() {
tt.setText("加载完成");
}else{
tif(i==100){
t.setText(i+"/100");
}
}
});
SystemClock.sleep(100);
}
};
}.start();
}
//方法一
private void method1() {
timer = new Timer();
/* * 参数1:任务
* 参数2:第一次执行任务的时间
* 参数3:每次任务的间隔时间,单位 ms
*/
timer.schedule(new TimerTask() {
/** 创建一个Timer任务,相当于开启了一个子线程
* 实际上run方法语句就是在子线程完成的
* 每隔一段时间要执行的任务
*/
@Override
public void run() {
// TODO Auto-generated method stub
runOnUiThread( new Runnable() {
public void run() {
pro.setProgress(i);
tt.setText(i+"/100");
if(i==100){
timer.cancel();
}
}
});
i+=10;
}
}, 0, 1000);//毫秒为单位
}
}