Progressbar组件自定义样式
Progressbar原生太丑了,根据UI设计图需要自定义样式,比如圆角,进度中末端是直角,怎样实现呢?
设计稿:
方案:
<?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 android:shape="rectangle"><solid android:color="#4dcbd2de" /> <!-- 背景颜色 --><!-- 圆角设置 --><cornersandroid:bottomLeftRadius="100dp"android:bottomRightRadius="100dp"android:topLeftRadius="100dp"android:topRightRadius="100dp" /></shape></item><!-- 进度部分 --><item android:id="@android:id/progress"><clip><shape android:shape="rectangle"><!-- 渐变色 --><gradientandroid:angle="180"android:endColor="#ff3a77f0"android:startColor="#ff3aacf0"android:type="linear"android:useLevel="true" /><!-- 进度条圆角设置 --><cornersandroid:bottomLeftRadius="100dp"android:bottomRightRadius="100dp"android:topLeftRadius="100dp"android:topRightRadius="100dp" /></shape></clip></item></layer-list>
进度id = progressbar的部分,有个标签Clip很重要。他的作用是“切”,将进度切到指定位置。若充满,自动变成圆角!
先创建样式:
values/themes.xml下<style name="CustomProgressBar" parent="Widget.AppCompat.ProgressBar.Horizontal"><item name="android:progressDrawable">@drawable/progressbarbg</item></style>
样式使用如下:
<ProgressBarandroid:id="@+id/progress_horizontal"android:layout_width="match_parent"style="@style/CustomProgressBar"android:max="100"android:indeterminate="false"android:layout_marginLeft="10dp"android:layout_marginRight="10dp"android:progress="10"android:layout_height="16dp"/>
或直接设置属性,
<ProgressBarandroid:id="@+id/progress_horizontal1"android:layout_width="match_parent"style="@style/CustomProgressBar"android:progressDrawable="@drawable/progressbarbg"//这里引用android:max="100"android:indeterminate="false"android:layout_marginLeft="10dp"android:layout_marginTop="30dp"android:layout_marginRight="10dp"android:progress="50"android:layout_height="16dp"/>
效果图:
倒数一 二组件效果图:
倒数一:组件进度未满,进度位置是直角
倒数二:进度充满,进度末端是圆角