[英]Android ShapeDrawable stroke is blurred
我创建了一个具有半透明边框的相当简单的shapedrawable,并将其用作两个相邻视图的背景。
如果笔划颜色是部分透明的,那么我期望的是纯色笔划(如右侧的图像),但是我得到的是模糊的笔划(左侧的图像)。
我做错了什么?
(图像是从ADT预览中获取的,在仿真器中效果更加明显)
这是ShapeDrawable( theme_base_bg_framed.xml
):
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid
android:color="@color/base_frame_solid_color"
/>
<stroke
android:width="@dimen/frame_border_size"
android:color="@color/base_frame_border_color"
/>
<padding
android:left="@dimen/frame_padding_size"
android:top="@dimen/frame_padding_size"
android:right="@dimen/frame_padding_size"
android:bottom="@dimen/frame_padding_size"
/>
</shape>
它使用以下颜色和尺寸定义:
<color name="base_frame_solid_color">#20ffffff</color>
<color name="base_frame_border_color">#40ffffff</color>
<dimen name="frame_border_size">2dp</dimen>
<dimen name="frame_padding_size">2dp</dimen>
两个可绘制对象都分配给View
的背景
<style name="ViewWithBorder">
<item name="android:background">@drawable/theme_base_bg_framed</item>
</style>
编辑:
ShapeDrawable中使用的颜色是有原因的。 后台视图将包含其他视图和/或图像。 这是我得到(左)和期望得到(右)的更好的例子。
我使用此值来获得所需的结果:colors.xml:
<color name="base_frame_solid_color">#20000000</color>
<color name="base_frame_border_color">#40ffffff</color>
形状:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid
android:color="@color/base_frame_solid_color"
/>
<stroke
android:width="@dimen/frame_border_size"
android:color="@color/base_frame_border_color"
/>
</shape>
希望这可以帮助!
好的,我发现了正在发生的事情以及如何解决它。
看起来,当用边框填充ShapeDrawable时,Android不会将其填充到完整大小,而只是填充到笔触的中间。 因此,以2dp的笔划,它周围留有1dp的空间。 仅在使用Alpha边框时(如我所做的那样),才能注意到这一点,因为通常边框会覆盖它。
为了解决此问题,我使用了一个LayerList可绘制对象,其中包含两个ShapeDrawable,一个用于纯色(无边框),一个用于笔触(无纯色):
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape
android:shape="rectangle">
<solid
android:color="@color/base_frame_solid_color"
/>
</shape>
</item>
<item>
<shape
android:shape="rectangle">
<stroke
android:width="@dimen/frame_border_size"
android:color="@color/base_frame_border_color"
/>
<padding
android:left="@dimen/frame_padding_size"
android:top="@dimen/frame_padding_size"
android:right="@dimen/frame_padding_size"
android:bottom="@dimen/frame_padding_size"
/>
</shape>
</item>
</layer-list>
它可以工作,但是由于边框要叠加到“纯色”背景上,因此颜色需要进行一些调整。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.