首先看效果:
第一种clip的方式:
第二种scale方式:
实现思路:
1.布局
<ProgressBar
android:layout_margin="20dp"
style="@style/my_progressbar_style_ver"
android:layout_width="wrap_content"
android:progress="35"
android:layout_height="match_parent"/>
2.在style中添加一个样式(继承自系统的水平进度条样式)
<style name="my_progressbar_style_ver" parent="Widget.AppCompat.ProgressBar.Horizontal">
<item name="android:progressDrawable">@drawable/progressbar_ver</item>
</style>
3.在drawable下自定义进度条形状progressbar_ver.xml(id需要与原始一致)
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@android:id/background">
<shape >
<corners android:radius="50dip" />
<gradient
android:angle="270"
android:centerY="0.75"
android:endColor="#F5F5F5"
android:startColor="#BEBEBE" />
</shape>
</item>
<item android:id="@android:id/progress">
<scale
android:scaleGravity="bottom"
android:scaleHeight="100%"
>
<shape >
<corners android:radius="50dip" />
<gradient
android:angle="270"
android:centerY="0.75"
android:endColor="#165CBC"
android:startColor="#85B0E9" />
</shape>
</scale>
<!--scale和clip只能二选一,一种是缩放一种是切割方式,进度条末端形状不同-->
<!-- <clip
android:gravity="bottom"
android:clipOrientation="vertical"
>
<shape >
<corners android:radius="50dip" />
<gradient
android:angle="270"
android:centerY="0.75"
android:endColor="#165CBC"
android:startColor="#85B0E9" />
</shape>
</clip>-->
</item>
</layer-list>
总结:
其实就是在自定义progressDrawable中id为progress下修改其进度改变方式,一种是缩放scale一种是切割clip,并在该属性上添加两个方向属性即可,自己改这两个属性,就可以实现从上到下或从右到左了。
scale
<scale
android:scaleGravity="bottom"
android:scaleHeight="100%"
>
clip
<clip
android:gravity="bottom"
android:clipOrientation="vertical"
>
前景色设置
ProgressBar.setProgressDrawable(drawable);