繁体   English   中英

Android ShapeDrawable笔触模糊

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM