Android 用笔画宽度绘制矢量的正确方法

Android correct way to draw vector with stroke width

您好,我正在尝试在我的 android 应用程序中使用矢量可绘制对象。

这是 xml 相同的

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="1024dp"
    android:height="1024dp"
    android:viewportWidth="1024"
    android:viewportHeight="1024">
    <path
        android:pathData="M 0,0 L 50,0 L 50,50 z"
        android:strokeColor="#000000" />
</vector>

这是没有任何笔画宽度的样子

如果我添加 android:strokeWidth="10" 它看起来是这样的

笔划宽度在所有线条上都不一致(宽度相同),最左边的点似乎没有被切断

有什么方法可以使画出的3条线都一致(等宽)而不是不规则的?

将可绘制对象想象成一个坐标系,点 p(0,0) 在 top-left 角上。您的 x-axis 从 top-left 变为 top-right,您的 y-axis 从 top-left 变为 bottom-left。

创建路径时,它会从坐标系中的一点到另一点。当您抚摸这条路径时,绘制的线条有一些 strokeWidth 默认情况下为 1。但是当你将宽度设置为,比如说 10,那么你的 coordinate-system 中的线会更粗,但是如果你的路径是,例如已经在 y=0 ,这个“厚度”应该去哪里?可绘制对象不会显示任何负坐标。这就是为什么你的 drawable 得到 cut-off.

解决方法: 将 strokeWidth 添加到小于 strokeWidth + 的坐标 从大于 viewportWidth-strokeWidth and/or viewportHeight-strokeWidth 的坐标中减去 strokeWidth + 为位于视口边界的边缘提供间距(在本例中为额外的3的间距就可以了)

因此您的代码应如下所示:

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="1024dp"
    android:height="1024dp"
    android:viewportWidth="1024"
    android:viewportHeight="1024">
    <path
        android:pathData="M 13,13 L 50,13 L 50,50 z"
        android:strokeColor="#000000"
        android:strokeWidth="10"/>
</vector>