实现动态更新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来实现数据更新。