实现动态更新ProgressBar的水平进度条:
布局文件progressBar.xml如下:
MyprogressBar.java代码如下:
- <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>
- <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来实现数据更新。