防止形状可绘制笔划的部分重叠

prevent partial overlapping of shape drawable stroke

有什么方法可以防止 stroke 部分重叠在 shape drawable 上。我更喜欢将笔画完全重叠在形状的边界上。

这是我的 xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <padding
        android:bottom="0dp"
        android:top="0dp"
        android:left="0dp"
        android:right="0dp" />
    <solid android:color="@color/green" />
    <stroke android:color="@color/red_50"
        android:width="20dp"
        android:dashGap="2dp"
        android:dashWidth="10dp" />
</shape>

colors.xml

<color name="green">#0f0</color>
<color name="red_50">#8f00</color>

这是实现的结果

如您所见,描边与实心部分重叠了 50%,但我希望它是 100%。

试着把它分成两种形状——一种是笔划,一种是矩形。在这个解决方案中,我操纵矩形的大小,以便我可以改变它与边框的关系。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:bottom="@dimen/offset"
        android:left="@dimen/offset"
        android:right="@dimen/offset"
        android:top="@dimen/offset">

        <shape android:shape="rectangle">
            <solid android:color="@color/green" />
        </shape>

    </item>

    <item>

        <shape android:shape="rectangle">
            <stroke
                android:width="20dp"
                android:color="@color/red_50"
                android:dashGap="2dp"
                android:dashWidth="10dp" />
        </shape>

    </item>

</layer-list>

您可以调整偏移以获得外部或内部笔划

这些值来自透明矩形(描边层)和大小的差异绿色的。在您的情况下,它们将是 20dp 或 none.