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

Android使用笔划宽度绘制矢量的正确方法,android,xml,android-layout,android-drawable,vector-graphics,Android,Xml,Android Layout,Android Drawable,Vector Graphics,嗨,我正在尝试在我的android应用程序中使用矢量绘图 下面是相同的xml <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="1024dp" android:height="1024dp" android:viewportWidth="1024" android:v

嗨,我正在尝试在我的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)位于左上角。x轴从左上角到右上角,y轴从左上角到左下角

创建路径时,路径会从坐标系中的一个点移动到另一个点。在绘制此路径时,绘制的线具有一些默认值为1的
strokeWidth
。但是,当您将宽度设置为10时,坐标系中的线条要厚得多,但是如果您的路径已经在y=0,那么该“厚度”应该放在哪里?drawable不会显示任何负坐标。这就是为什么你的抽绳被切断了

解决方案: 将
strokeWidth
添加到小于
strokeWidth
+ 从大于
viewportWidth strokeWidth
和/或
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>


从我看到的问题是,您正在左上角(0,0)绘制,这会导致笔划的一侧被剪裁到视口的边缘。感谢您提供的解决方案,我想知道是否有适用于复杂对象的通用解决方案,我的意思是,在xml中提供一个向量资产,我们是否可以使用具有不同笔划宽度的相同xml而不改变底层对象