zoukankan      html  css  js  c++  java
  • 2.08ProgressBar(进度条)-UI组件-Android

    TOC

    ProgressBar(进度条)-UI组件-Android

    常用属性

    属性名 说明
    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的样式.

    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

    案例

    <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">
    
        <!-- 系统提供的圆形进度条,依次是大中小 -->
    
        <ProgressBar
            style="@android:style/Widget.ProgressBar.Small"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <!-- 圆形进度-->
        <ProgressBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
        <ProgressBar
            style="@android:style/Widget.ProgressBar.Large"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
        <!--系统提供的水平进度条-->
        <ProgressBar
            android:id="@+id/pb"
            style="@android:style/Widget.ProgressBar.Horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:max="100"
            android:progress="0" /><!--android:progress 初始进度 ,默认18-->
    
        <ProgressBar
            style="@android:style/Widget.ProgressBar.Horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:indeterminate="true" />
        <!--android:indeterminate="true" 进度不精确的显示-->
    
    </LinearLayout>

    package com.ttit.helloworld;
    
    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; //最大进度值
    
        //处理handler传递的消息
        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.progressbar_layout);
            //获取组件
            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);//间隔1s
                                currentProgress += 10;//进度加10
                                if (currentProgress > maxProgress) {
                                    break;
                                }
                                mHandler.sendEmptyMessage(0);//发送消息,子线程发送到主线程
                            }
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }.start();
        }
    }

    样式

        <style name="Widget.ProgressBar.Small">
            <item name="indeterminateDrawable">@drawable/progress_small_white</item>
            <item name="minWidth">16dip</item>
            <item name="maxWidth">16dip</item>
            <item name="minHeight">16dip</item>
            <item name="maxHeight">16dip</item>
        </style>
    
        <style name="Widget.ProgressBar.Large">
            <item name="indeterminateDrawable">@drawable/progress_large_white</item>
            <item name="minWidth">76dip</item>
            <item name="maxWidth">76dip</item>
            <item name="minHeight">76dip</item>
            <item name="maxHeight">76dip</item>
        </style>
    
        <style name="Widget.ProgressBar.Horizontal">
            <item name="indeterminateOnly">false</item>
            <item name="progressDrawable">@drawable/progress_horizontal</item>
            <item name="indeterminateDrawable">@drawable/progress_indeterminate_horizontal</item>
            <item name="minHeight">20dip</item>
            <item name="maxHeight">20dip</item>
            <item name="mirrorForRtl">true</item>
        </style>
  • 相关阅读:
    Android高斯模糊技术,实现毛玻璃效果(转)
    设计模式笔记之六:生产消费者模式
    设计模式笔记之五:观察者模式
    设计模式笔记之四:MVP+Retrofit+RxJava组合使用
    设计模式笔记之三:Android DataBinding库(MVVM设计模式)
    Eclipse Code Recommenders 自动补全(联想)神器
    java根据freeMark模板生成内容
    通过java反射机制,获取对象的属性和值(包括所有继承的父类)
    win7下自动更新svn目录
    jdk11 eclipse下开启ZGC
  • 原文地址:https://www.cnblogs.com/ziyue7575/p/c25a71df120ecbd6e868ae0a49fb6606.html
Copyright © 2011-2022 走看看