Android自定义ProgressBar样式

1,054 阅读1分钟

实现效果

image.png

实现步骤

  1. 在XML中添加ProgressBar: 打开你的布局文件(例如activity_main.xml),并添加ProgressBar元素。
<ProgressBar
    android:id="@+id/customProgressBar"
    android:layout_marginTop="30dp"
    android:layout_marginLeft="30dp"
    android:layout_marginRight="30dp"

    android:layout_width="match_parent"
    android:layout_height="wrap_content"

    style="@style/CustomProgressBarStyle"
    android:max="100"
    android:progress="50"
    />
  1. res/values/styles.xml中定义样式:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="CustomProgressBarStyle" parent="@android:style/Widget.ProgressBar.Horizontal">
            <item name="android:progressDrawable">@drawable/custom_progress_bar</item>
    </style>
</resources>
  1. res/drawable/custom_progress_bar.xml中定义自定义Drawable。
<?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="10dp"/>
                <solid android:color="#cdcdcc" />
            </shape>
        </item>
        <item android:id="@android:id/progress">
            <clip>
                <shape>
                    <corners android:radius="10dp"/>
                    <solid android:color="#ecc0a1" />
                </shape>
            </clip>
        </item>
    </layer-list>

此处如果不使用<clip>标签会导致进度充满整个进度条

使用scale标签而不是clip标签

<?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="10dp"/>
                <solid android:color="#cdcdcc" />
            </shape>
        </item>
        <item android:id="@android:id/progress">
            <scale android:scaleWidth="100%">
                <shape>
                    <corners android:radius="10dp"/>

                    <solid android:color="#ecc0a1" />
                </shape>
            </scale>



        </item>
    </layer-list>

也可以实现相同的效果