Android垂直进度条Drawable中Clip标签与圆角不兼容问题
解决垂直进度条进度部分圆角失效的问题
这个问题我之前也碰到过,核心原因是<clip>标签的工作机制:它会直接裁剪掉超出显示范围的Drawable内容,当进度未填满整个进度条时,进度shape的顶部圆角(因为是从底部往上填充)会被完全裁剪,而底部圆角又被背景层覆盖,导致看起来进度部分完全没有圆角效果。
解决方案1:用<scale>替代<clip>(推荐)
通过<scale>标签实现垂直方向的缩放显示,这样进度的shape会完整保留圆角属性,根据进度值从底部向上缩放:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape> <corners android:radius="9dip"/> <solid android:color="@color/bottom_bar_color"/> <stroke android:width="1dp" android:color="@color/bottom_bar_color" /> </shape> </item> <item android:id="@android:id/progress"> <scale android:scaleOrientation="vertical" android:gravity="bottom"> <shape> <corners android:radius="9dip"/> <solid android:color="#FFFFFF"/> <stroke android:width="1dp" android:color="#fff" /> </shape> </scale> </item> </layer-list>
这种方式下,进度条的圆角会始终保持:进度较低时,顶部的圆角正常显示;进度满时,整个进度条的圆角和背景完全匹配。
解决方案2:只保留进度底部的圆角
如果你的设计只需要进度的底部和背景保持圆角一致,顶部可以是平直的,可以修改进度shape的圆角属性,只设置底部两个圆角,这样即使使用<clip>也能正常显示:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape> <corners android:radius="9dip"/> <solid android:color="@color/bottom_bar_color"/> <stroke android:width="1dp" android:color="@color/bottom_bar_color" /> </shape> </item> <item android:id="@android:id/progress"> <clip android:clipOrientation="vertical" android:gravity="bottom"> <shape> <!-- 仅设置底部圆角 --> <corners android:bottomLeftRadius="9dip" android:bottomRightRadius="9dip"/> <solid android:color="#FFFFFF"/> <stroke android:width="1dp" android:color="#fff" /> </shape> </clip> </item> </layer-list>
内容的提问来源于stack exchange,提问作者Nicky
相关产品推荐
相关产品推荐

