Android ProgressBar 的使用

Android ProgressBar 分为水平进度条和圆形进度条, 看官方的划分是Indeterminate Progress(不确定的进度) 和 Determinate Progress(决定进度) 下面有2个demo 一个是圆形的进度条和一个水平的进度条

Indeterminate Progress: 

当您不知道操作将花费多长时间时,请对进度栏使用不确定模式。不确定模式是进度条的默认模式,它显示循环动画,但未指示特定的进度

这也就是官方的圆形进度条一直在旋转的原因吧

Determinate Progress

如果要显示已发生特定数量的进度,请对进度栏使用确定模式。例如,要检索的文件的剩余百分比,批量写入数据库的记录数量或正在播放的音频文件的剩余百分比。

为了指示确定的进度,您可以将进度条的样式设置为,android.R.style#Widget_ProgressBar_Horizontal并设置进度量

这里说下 android.R.style#Widget_ProgressBar_Horizontal 就是设置样色的时候有2中方式

一种为: style="?android:attr/progressBarStyleHorizontal" 另一种为:style="@android:style/Widget.ProgressBar.Horizontal"

style="?android:attr/progressBarStyleHorizontal" 的方法是系统没有设置style ,背景色之类,等,

style="@android:style/Widget.ProgressBar.Horizontal"  的方法系统设置style,设置进度条背景色,宽度等,

下面是系统的设置 点击code 可以跳转系统设置的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>

progressBar 的xml 属性如下XML属性


android:animationResolution    动画帧之间的超时(以毫秒为单位)。
android:indeterminate    允许启用不确定模式。
android:indeterminateBehavior    定义进度达到最大值时不确定模式应如何表现。
android:indeterminateDrawable    用于不确定模式的Drawable。
android:indeterminateDuration    不确定动画的持续时间。
android:indeterminateOnly    仅限于不确定模式(状态保持进度模式将不起作用)。
android:interpolator    设置不确定动画的加速度曲线。
android:max    定义最大值。
android:maxHeight    一个可选参数,用于为此视图提供最大高度。
android:maxWidth    提供此视图最大宽度的可选参数。
android:min    定义最小值。
android:minHeight    定义最低高度
android:minWidth    定义最低宽度
android:mirrorForRtl    定义在RTL模式下是否需要镜像关联的可绘制对象。
android:progress    定义默认进度值,介于0到最大值之间。
android:progressDrawable    可绘制用于进度模式。
android:secondaryProgress    定义二级进度值,介于0和最大值之间。

下面是使用系统的方法写的几个效果如下

 

圆形进度条

1 对于圆形进度条 要修改颜色值可以使用下面的方法

android:indeterminateTint="#00d8a0"

如下 这样就修改了系统圆形进度条的颜色了

    <ProgressBar
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:indeterminateTint="#00d8a0"
            android:indeterminate="false" />

2 圆形动画修改系统的样式 使用的方法 indeterminateDrawable

最下面的菊花就是修改了系统圆形的效果

代码如下

 <ProgressBar
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:indeterminateDrawable="@drawable/anim_drawable_bg" />

anim_drawable_bg 的code

<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
        android:drawable="@drawable/loading"
        android:fromDegrees="0.0"
        android:pivotX="50.0%"
        android:pivotY="50.0%"
        android:toDegrees="360.0" />

这样就是了一个菊花旋转的效果而,

如果要实现特殊的效果建议自定义了

如下的效果

代码参考 我的另一篇博客地址链接

水平进度条

需要设置属性  style="@android:style/Widget.ProgressBar.Horizontal" 或者  style="?android:attr/progressBarStyleHorizontal" 2中方法的区别上面都说了这里就不多说了

上面的进度code 如下

 <ProgressBar
            android:id="@+id/sys_progress"
            style="@android:style/Widget.ProgressBar.Horizontal"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:layout_marginTop="20dp"
            android:max="100" />


    <ProgressBar
            android:id="@+id/hori_progress"
            style="@android:style/Widget.ProgressBar.Horizontal"
            android:layout_width="match_parent"
            android:layout_height="20dp"
            android:layout_marginTop="20dp"
            android:max="100"
            android:progress="0"
            android:progressDrawable="@drawable/hori_progress_drawable_bg" />


    <ProgressBar
            android:id="@+id/send_progress"
            style="@android:style/Widget.ProgressBar.Horizontal"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:layout_marginTop="20dp"
            android:max="100"
            android:progress="50"
            android:progressDrawable="@drawable/send_progress_bg"
            android:secondaryProgress="70" />

水平进度条需要画几个背景色,   进度条的背景色, 缓冲进度条的背景色(没有这个需求可以不要)  进度条的背景色

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
     <!--     进度条的背景色-->
    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="5dp" />
            <solid android:color="@android:color/holo_green_dark" />
        </shape>
    </item>
    <!--    缓冲进度条的背景色-->
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="5dp" />
                <solid android:color="@android:color/darker_gray" />
            </shape>
        </clip>
    </item>
    <!--  进度条的背景色-->
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="5dp" />
                <solid android:color="@android:color/holo_orange_dark"/>
            </shape>
        </clip>
    </item>
</layer-list>

main code

public class HorizontalActivity extends AppCompatActivity implements Handler.Callback {

    private ProgressBar progressBar;
    private ProgressBar sysProgressBar;
    private ProgressBar send_progress;
    private Handler handler;
    private int progress = 0;
    private int sendProgress = 0;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.horizontal_activity_layout);

        progressBar = findViewById(R.id.hori_progress);
        sysProgressBar = findViewById(R.id.sys_progress);
        send_progress = findViewById(R.id.send_progress);

        handler = new Handler(this);
        // 循环方法1
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                handler.postDelayed(this, 50);
                handler.sendEmptyMessage(1);
            }
        }, 0);

        // 循环方法2
        //        new Thread(new Runnable() {
        //            @Override
        //            public void run() {
        //                try {
        //                    //子线程循环间隔消息
        //                    while (progress < 100) {
        //                        Message msg = new Message();
        //                        msg.what = 1;
        //                        handler.sendMessage(msg);
        //                        Thread.sleep(50);
        //                    }
        //                } catch (InterruptedException e) {
        //                    e.printStackTrace();
        //                }
        //            }
        //        }).start();

    }

    @Override
    public boolean handleMessage(Message msg) {
        switch (msg.what) {
            case 1:
                if (progress == 100) {
                    progress = 0;
                    sendProgress = 0;
                } else {
                    progress++;
                    sendProgress = 5 + sendProgress;
                }

                progressBar.setProgress(progress);
                sysProgressBar.setProgress(progress);
                send_progress.setProgress(progress);
                send_progress.setSecondaryProgress(sendProgress);
                break;

        }

        return false;
    }
}

progress 还有几个其他的属性,设置,大小之类的,感觉实用性不强,这里就不列举了,

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值