【问题标题】: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:width="20dp"
        android:dashGap="2dp"
        android:dashWidth="10dp" />
</shape>

colors.xml

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

这是实现的目标

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

【问题讨论】:

    标签: android android-shapedrawable


    【解决方案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:width="20dp"
                    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 额外的绿色空间。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    相关资源
    最近更新 更多