实现动态更新ProgressBar的水平进度条:
布局文件progressBar.xml如下:
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<!--大型环状进度条-->
<ProgressBar
android:id="@+id/bar1"
style="@android:style/Widget.ProgressBar.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<!--中型环状进度条-->
<ProgressBar
android:id="@+id/bar2"
style="@android:style/Widget.ProgressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<!--小型环状进度条-->
<ProgressBar
android:id="@+id/bar3"
style="@android:style/Widget.ProgressBar.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="25dp"/>
<!--水平进度条-->
<ProgressBar
android:id="@+id/bar4"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout></span>
MyprogressBar.java代码如下:
<span style="font-size:18px;">package com.example.lenovo.photobrowse;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import java.util.Random;
/**
* Created by lenovo on 2016/5/24.
*/
public class MyprogessBar extends AppCompatActivity {
//该程序模拟填充长度为100的数组
private int[] data = new int[100];
private int hasData = 0;
//记录progressBar的完成程度
private int status = 0;
private ProgressBar bar1;
private ProgressBar bar2;
private TextView tv;
//创建一个负责更新进度的hander
Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what == 0x111){
bar1.setProgress(status);
bar2.setProgress(status);
tv.setText("已完成"+status+"%");
if(status==100)
Toast.makeText(MyprogessBar.this,"以下载完成",Toast.LENGTH_SHORT).show();
}
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.progresssbar_layout);
bar1 = (ProgressBar) findViewById(R.id.bar1);
bar2 = (ProgressBar) findViewById(R.id.bar4);
tv = (TextView) findViewById(R.id.tv1);
//启动线程来执行任务
new Thread(){
@Override
public void run() {
while(status<100) {
//获取耗时操作的完成百分比
status = doWork();
//发送消息
mHandler.sendEmptyMessage(status);
}
}
}.start();
}
//模拟一个耗时的操作
private int doWork() {
data[hasData++] = (int)(Math.random()*100);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return hasData;
}
}</span>
总结:本例通过填充数组里得内容结合线程里的Sleep来实现数据更新,总结:本例通过填充数组里得内容结合线程里的Sleep来实现数据更新。