layer-list方式自定义progressbar

先上布局:

<ProgressBar
            android:id="@+id/pb"
            style="@android:style/Widget.ProgressBar.Horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:progressDrawable="@drawable/bg_progressbar"
            android:max="100"
            />

progressDrawable是重点,根标签是layer-list,看下代码:

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2008 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="5dip" />
            <solid android:color="@color/color_e7e7e7"/>
        </shape>
    </item>

    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="5dip" />
                <solid android:color="@color/color_f04726"/>
            </shape>
        </clip>
    </item>

    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="5dip" />
                <solid android:color="@color/color_f04726"></solid>
            </shape>
        </clip>
    </item>

</layer-list>
这里介绍一下clip标签,<clip>标签使用了如下的3个属性来控制如何截取图像。

android:drawable:指定要剪切的原图像,这里用的不是图片,用的是shape。

android:clipOrientation:截取的方向。可取的值:horizontal和vertical。分别表示水平和垂直方向截取图像。

android:gravity:表示如何截取图像。例如,left表示从左侧截取图像,right表示从右侧截取图像。

这样出来的进度是直角的,如果想要进度也是圆角的,布局如下:

?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2008 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@android:id/background">
        <shape>
            <corners android:radius="5dip" />
            <solid android:color="@color/color_e7e7e7"/>
        </shape>
    </item>

    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="5dip" />
                <solid android:color="@color/color_f04726"/>
            </shape>
        </clip>
    </item>

    <item android:id="@android:id/progress">
        <scale
            android:scaleWidth="100%" >
        <shape>
            <corners android:radius="5dip" />
            <solid android:color="@color/color_f04726"></solid>
        </shape>
        </scale>
    </item>

</layer-list>

关键点是将clip标签替换为scale标签,scaleWidth设置为100%。

ProgressBar 是 Android 开发中常用的控件之一,它用于展示进度条。ProgressBar 的样式可以通过修改其属性或使用自定义样式来进行自定义。 下面是一个简单的 ProgressBar 自定义样式的示例: 1. 首先,在 `res/drawable` 目录下创建一个 XML 文件,例如 `custom_progress_bar.xml`。 ```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="8dp"/> <solid android:color="#e0e0e0"/> </shape> </item> <item android:id="@android:id/progress"> <clip> <shape> <corners android:radius="8dp"/> <solid android:color="#00FF00"/> </shape> </clip> </item> </layer-list> ``` 2. 在布局文件中使用自定义ProgressBar 样式。 ```xml <ProgressBar android:id="@+id/progressBar" style="@android:style/Widget.ProgressBar.Horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:progressDrawable="@drawable/custom_progress_bar" android:indeterminate="false" android:max="100" android:progress="50"/> ``` 在这个示例中,我们定义了一个自定义ProgressBar 样式 `custom_progress_bar.xml`,并在布局文件中使用了这个样式。通过设置 `android:progressDrawable` 属性为自定义的样式,我们可以实现自定义 ProgressBar 样式的效果。 这个示例中的自定义 ProgressBar 样式是一个分层列表,其中包含了两个项目: * `android:id="@android:id/background"`:用于设置 ProgressBar 的背景样式。 * `android:id="@android:id/progress"`:用于设置 ProgressBar 的进度样式。 在这个示例中,我们使用了圆角矩形来设置 ProgressBar 的形状,并使用了绿色的颜色来表示 ProgressBar 的进度。你可以根据自己的需要修改这些属性来实现自定义ProgressBar 样式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值