防止形状可绘制笔划的部分重叠
Posted
技术标签:
【中文标题】防止形状可绘制笔划的部分重叠【英文标题】:prevent partial overlapping of shape drawable stroke 【发布时间】:2017-03-03 08:13:17 【问题描述】:有什么方法可以防止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:
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 额外的绿色空间。)以上是关于防止形状可绘制笔划的部分重叠的主要内容,如果未能解决你的问题,请参考以下文章