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

Posted

技术标签:

【中文标题】防止形状可绘制笔划的部分重叠【英文标题】:prevent partial overlapping of shape drawable stroke 【发布时间】:2017-03-03 08:13:17 【问题描述】:

有什么方法可以防止strokeshape 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:
        android:dashGap="2dp"
        android:dashWidth="10dp" />
</shape>

colors.xml

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

这是实现的目标

如您所见,笔画与实体部分重叠 50%,但我希望它是 100%。

【问题讨论】:

【参考方案1】:

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

<?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:
                android:color="@color/red_50"
                android:dashGap="2dp"
                android:dashWidth="10dp" />
        </shape>

    </item>

</layer-list>

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

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

【讨论】:

如果 B 不是填充矩形的填充为零?因为没有行程可以适应。 @EugenPechanec 如果没有偏移,我们会得到有问题的结果 - 绿色矩形开始 笔画宽度的一半。这就是为什么我们必须通过这个值来增加它的边界(通过减去 'padding')。 但是你帖子的重点是绿色矩形没有中风,所以它填充了整个可用区域,因此不需要负偏移,不是吗? (即,如果您需要将绿色矩形偏移 20dp 以适应 20dp 宽的笔划,那么您需要 20-20=0dp 偏移才能在笔划下方绘制绿色。) @EugenPechanec 你是对的。我已经编辑了答案。你现在同意吗?我在测试时错过了它 - 它看起来不错,但您的建议确实是正确的 :) 是的,现在看起来不错。 (注意:如果其父级具有android:clipChildren="false",则原始视图会在视图周围产生 10dp 额外的绿色空间。)

以上是关于防止形状可绘制笔划的部分重叠的主要内容,如果未能解决你的问题,请参考以下文章

iOS Core Graphics 中的“形状爆裂”笔划

防止 Proguard 删除特定的可绘制对象

仅在窗口调整大小时防止 div 重叠(带样式组件)

在我的仓库中,最长的哈希前缀必须多长时间才能防止任何重叠?

Android共享元素过渡——防止共享元素被绘制

如何防止视图重叠?