我创建了一个相当简单的具有半透明边框的可塑形图,并将其用作两个相邻视图的背景。
如果srtoke颜色是部分透明的,我期待一个坚实的笔触(就像右边的图像),但我得到的是一个模糊的笔划(左边的图像)。
我做错了什么?
(图像来自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>
两个drawable都被分配到View
的背景
<style name="ViewWithBorder">
<item name="android:background">@drawable/theme_base_bg_framed</item>
</style>
编辑:
ShapeDrawable中使用的颜色是有原因的。后台视图将包含其他视图和/或图像。这是我得到的(左)和我期望得到的(右)的更好的例子。
答案 0 :(得分:1)
我使用此值来获得您想要的结果: 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>
希望这有帮助!
答案 1 :(得分:0)
好的,我发现了正在发生的事情以及如何解决它。
似乎Android在填充带边框的ShapeDrawable时,并没有将其填充到它的全尺寸,而只是填充到笔划的中间位置。因此,如果行程为2dp,则会在周围留出1dp的空间。只有在使用字母边框时才会注意到这一点,就像我正在做的那样,因为通常边框覆盖它。
为了解决这个问题,我使用了一个包含两个ShapeDrawables的LayerList drawable,一个用于纯色(没有边框),另一个用于笔触(没有纯色):
<?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>
它有效,但是作为边界叠加在&#34; solid&#34;背景,它的颜色需要一些调整。