Android进阶之路Android开发

Android代码中动态设置ProgressBar背景

2021-09-03  本文已影响0人  lebronzhen

总共介绍两种方式,一种是在xml文件中写死的,一种是java代码动态设置的,第二种的优势就是可以动态设置,比如根据用户设置或者后台回传的样式来动态进行设置。

第一种 xml 设置

直接 drawable 文件夹下新建一个 xml 文件,配置代码如下:

<?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="#E4E7ED" />
        </shape>
    </item>

    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="5dp" />
                <solid android:color="#E4E7ED" />
            </shape>
        </clip>
    </item>

    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="5dp" />
                <solid android:color="#409EFF" />
            </shape>
        </clip>
    </item>
</layer-list>

设置background, secondaryProgress, progress的颜色和弧度值。
然后在布局文件中设置进去

<ProgressBar
        android:id="@+id/install_progress"
        style="?android:attr/progressBarStyleHorizontal"
        android:progressDrawable="@drawable/progress"
        android:layout_width="match_parent"
        android:layout_height="4dp"/>
第二种 java代码动态设置

原理一样,在代码中给 Drawable 设置背景和弧度值,最后设置给 progressBar,下边附上代码:

int roundRadius = 8; // 圆角半径 The x-radius of the oval used to round the corners
//准备progressBar带圆角的背景Drawable
GradientDrawable progressBg = new GradientDrawable();
//设置圆角弧度
progressBg.setCornerRadius(roundRadius);
//设置绘制颜色
progressBg.setColor(Color.parseColor("#E4E7ED"));

//准备progressBar带圆角的进度条Drawable
GradientDrawable progressContent = new GradientDrawable();
progressContent.setCornerRadius(roundRadius);
//设置绘制颜色,此处可以自己获取不同的颜色
progressContent.setColor(Color.parseColor("#409EFF"));

//ClipDrawable是对一个Drawable进行剪切操作,可以控制这个drawable的剪切区域,以及相相对于容器的对齐方式
ClipDrawable progressClip = new ClipDrawable(progressContent, Gravity.START, ClipDrawable.HORIZONTAL);
//设置progressBarDrawable
progress.setProgressDrawable(progressClip);
progress.setBackground(progressBg);

这样即可实现,当时progressBar也可以在代码中动态生成,然后动态设置位置,都是可以的,根据自己的需求来实现即可。

上一篇 下一篇

猜你喜欢

热点阅读