Android开发-Android常用组件-ProgressBar进度条

发布时间 2023-03-30 17:13:13作者: 临易

4.8  ProgressBar进度条

  • 常用属性

android:max

进度条的最大值

android:progress

进度条已完成进度值

android:progressDrawable

设置轨道对应的Drawable对象

android:indeterminate

如果设置成true,则进度条不精确显示进度

android:indeterminateDrawable

设置不显示进度的进度条的Drawable对象

android:indeterminateDuration

设置不精确显示进度的持续时间

android:secondaryProgress

二级进度条,类似于视频播放的一条是当前播放进度,一条是  缓冲进度,前者通过progress属性进行设置

  • 对应的再Java中我们可调用下述方法:

getMax()

返回这个进度条的范围的上限

getProgress()

返回进度

getSecondaryProgress()

返回次要进度

incrementProgressBy(int diff)

指定增加的进度

isIndeterminate()

指示进度条是否在不确定模式下

setIndeterminate(Boolean indeterminate)

设置不确定模式下

 
  • 设置ProgressBar的样式,不同的样式会有不同的形状和模式:

Widget.ProgressBar.Horizontal

横向进度条(精确模式或模糊模式,这取决于Android:indeterminate)

Widget.ProgressBar

中号的圆形进度条(模糊模式)

Widget.ProgressBar.Small

小号的圆形进度条(模糊模式)

Widget.ProgressBar.Large

大号的圆形进度条(模糊模式)

Widget.ProgressBar.Inverse

中号的圆形进度条(模糊模式),该样式适用于亮色背景(例如白色)

Widget.ProgressBar.Small.Inverse

小号的圆形进度条(模糊模式),该样式适用于亮色背景(例如白色)

Widget.ProgressBar.Large.Inverse

 

大号的圆形进度条(模糊模式),该样式适用于亮色背景(例如白色)

progress_bar.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
<!--    系统提供的圆形进度条,fenw小、中、大-->
    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@android:style/Widget.ProgressBar.Small"/>
    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@android:style/Widget.ProgressBar.Large"/>
<!--    系统提供的水平进度条,分为模糊和不模糊-->
    <ProgressBar
        android:id="@+id/pb"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@android:style/Widget.ProgressBar.Horizontal"
        android:max="100"
        android:progress="18"/>
    <ProgressBar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:indeterminate="true"  //不精确显示进度
        style="@android:style/Widget.ProgressBar.Horizontal"/>
</LinearLayout>

 

 

  •  模拟进度条更新:
ProgressBarActivity .java:
package com.example.myapplication;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ProgressBar;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;


public class ProgressBarActivity extends AppCompatActivity {
    private int currentProgress = 0;//当前进度值
    private ProgressBar progressBar;
    private int maxProgress;    //最大进度值
    
    private Handler mHandler = new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg){
            super.handleMessage(msg);
            switch (msg.what){
                case 0:
                    progressBar.setProgress(currentProgress);
                    break;
            }
        }
    };
    
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.progress_bar);
        progressBar = findViewById(R.id.pb);
        maxProgress = progressBar.getMax();
    }
    @Override
    protected void onStart(){
        super.onStart();
        //启动线程模拟加载
        new Thread(){
            @Override
            public void run() {
                while (true) {
                    try {
                        for (int i = 0; i < 100; i++) {
                            Thread.sleep(1000);
                            currentProgress += 10;
                            if (currentProgress > maxProgress) {
                                break;
                            }
                            mHandler.sendEmptyMessage(0);
                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }.start();
    }
}

 

 启动测试: