实现动态更新ProgressBar的水平进度条

前端之家收集整理的这篇文章主要介绍了实现动态更新ProgressBar的水平进度条前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

实现动态更新ProgressBar的水平进度条:


布局文件progressBar.xml如下:

  1. <span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent">
  6. <LinearLayout
  7. android:orientation="horizontal"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content">
  10. <!--大型环状进度条-->
  11. <ProgressBar
  12. android:id="@+id/bar1"
  13. style="@android:style/Widget.ProgressBar.Large"
  14. android:layout_width="wrap_content"
  15. android:layout_height="wrap_content"/>
  16.  
  17. <!--中型环状进度条-->
  18. <ProgressBar
  19. android:id="@+id/bar2"
  20. style="@android:style/Widget.ProgressBar"
  21. android:layout_width="wrap_content"
  22. android:layout_height="wrap_content"/>
  23.  
  24. <!--小型环状进度条-->
  25. <ProgressBar
  26. android:id="@+id/bar3"
  27. style="@android:style/Widget.ProgressBar.Small"
  28. android:layout_width="wrap_content"
  29. android:layout_height="wrap_content"/>
  30. </LinearLayout>
  31. <TextView
  32. android:id="@+id/tv1"
  33. android:layout_width="match_parent"
  34. android:layout_height="25dp"/>
  35.  
  36. <!--水平进度条-->
  37. <ProgressBar
  38. android:id="@+id/bar4"
  39. style="@android:style/Widget.ProgressBar.Horizontal"
  40. android:layout_width="match_parent"
  41. android:layout_height="wrap_content"/>
  42.  
  43. </LinearLayout></span>
MyprogressBar.java代码如下:
  1. <span style="font-size:18px;">package com.example.lenovo.photobrowse;
  2.  
  3. import android.os.Bundle;
  4. import android.os.Handler;
  5. import android.os.Message;
  6. import android.support.annotation.Nullable;
  7. import android.support.v7.app.AppCompatActivity;
  8. import android.widget.ProgressBar;
  9. import android.widget.TextView;
  10. import android.widget.Toast;
  11.  
  12. import java.util.Random;
  13.  
  14. /**
  15. * Created by lenovo on 2016/5/24.
  16. */
  17.  
  18. public class MyprogessBar extends AppCompatActivity {
  19.  
  20. //该程序模拟填充长度为100的数组
  21. private int[] data = new int[100];
  22. private int hasData = 0;
  23. //记录progressBar的完成程度
  24. private int status = 0;
  25.  
  26. private ProgressBar bar1;
  27. private ProgressBar bar2;
  28. private TextView tv;
  29.  
  30. //创建一个负责更新进度的hander
  31. Handler mHandler = new Handler(){
  32. @Override
  33. public void handleMessage(Message msg) {
  34. if(msg.what == 0x111){
  35. bar1.setProgress(status);
  36. bar2.setProgress(status);
  37. tv.setText("已完成"+status+"%");
  38. if(status==100)
  39. Toast.makeText(MyprogessBar.this,"以下载完成",Toast.LENGTH_SHORT).show();
  40. }
  41. }
  42. };
  43.  
  44. @Override
  45. protected void onCreate(@Nullable Bundle savedInstanceState) {
  46. super.onCreate(savedInstanceState);
  47. setContentView(R.layout.progresssbar_layout);
  48.  
  49. bar1 = (ProgressBar) findViewById(R.id.bar1);
  50. bar2 = (ProgressBar) findViewById(R.id.bar4);
  51. tv = (TextView) findViewById(R.id.tv1);
  52.  
  53. //启动线程来执行任务
  54. new Thread(){
  55. @Override
  56. public void run() {
  57. while(status<100) {
  58. //获取耗时操作的完成百分比
  59. status = doWork();
  60.  
  61. //发送消息
  62. mHandler.sendEmptyMessage(status);
  63. }
  64. }
  65. }.start();
  66.  
  67. }
  68. //模拟一个耗时的操作
  69. private int doWork() {
  70. data[hasData++] = (int)(Math.random()*100);
  71.  
  72. try {
  73. Thread.sleep(1000);
  74. } catch (InterruptedException e) {
  75. e.printStackTrace();
  76. }
  77. return hasData;
  78. }
  79. }</span>


总结:本例通过填充数组里得内容结合线程里的Sleep来实现数据更新,总结:本例通过填充数组里得内容结合线程里的Sleep来实现数据更新。

猜你在找的XML相关文章