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

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

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

猜你在找的XML相关文章