2

创建了一个 svg 图标(效果很好)但是,当在 android 中显示为矢量可绘制时,其中一个路径不会呈现相同的内容。这是原始的svg路径:

<path
   d="m 34.424316,19.525423 0,-1.2854 -2.329101,0 0,-0.604248 2.449951,-3.479004 
0.53833,0 0,3.479004 0.725098,0 0,0.604248 -0.725098,0 0,1.2854 -0.65918,0 z m 
0,-1.889648 0,-2.420655 -1.680908,2.420655 1.680908,0 z"
   style="fill:#FF00FF"
   id="path3383" />

这就是它的样子:

svg 路径

安卓路径:

<path
    android:fillColor="#FF00FF"
    android:pathData="M 34.424316,19.525423 l 0,-1.2854 -2.329101,0 0,-0.604248
2.449951,-3.4790040.53833,0 0,3.479004 0.725098,0 0,0.604248 -0.725098,0 0,1.2854 -0.65918,0 z m
0,-1.889648 0,-2.420655 -1.680908,2.420655 1.680908,0 z" />

以及它的外观:

安卓路径

PS android studio 让它变得模糊,但这不是问题,它在 Android lollipop 上渲染得尽可能清晰。

问题是4中的洞被填满了。即使两条路径大多相同(唯一的区别是在第一个坐标之后添加了“l”。但如果我删除它,则 4 根本不会渲染)。

4

2 回答 2

1

您帖子的路径数据中没有命令字符。提问者所说的“l”是在第一组坐标之后引入的,实际上是“M”之后的第一个命令字符。根据文档,如果命令字符与以前的相同,则可以省略它以节省空间。但是这里提问者提到的“l”是“M”(移动到)命令字符之后的第一个“l”。“l”是“line to”命令字符。在这种情况下,它是第一个,不能省略。我修复了文件,并在下面给出了文件的内容。

我正在显示您帖子的第二个路径数据向左移动了 10 个像素(M 24.424316、19.525423)我将填充颜色更改为蓝色。

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="30dp"
        android:height="30dp"
        android:viewportWidth="40.0"
        android:viewportHeight="40.0">



    <path
        android:pathData="


     m  34.424316,   19.525423
     l   0,          -1.2854
     l  -2.329101,    0
     l   0,          -0.604248
     l   2.449951,   -3.479004
     l   0.53833,     0
     l   0,           3.479004
     l   0.725098,    0
     l   0,           0.604248
     l  -0.725098,    0
     l   0,           1.2854
     l  -0.65918,     0

     m   0,          -1.889648
     l   0,          -2.420655
     l  -1.680908,    2.420655
     l   1.680908,    0      "


    android:strokeLineCap="square"
    android:strokeColor="#ffff00ff"
    android:fillColor="#ff0000ff"
    android:strokeWidth="0.2"/>

    <path
    android:pathData="


    M   24.424316,  19.525423
    l    0,         -1.2854
    l   -2.329101,   0
    l    0,         -0.604248
    l    2.449951,  -3.479004
    l    0.53833,    0
    l    0,          3.479004
    l    0.725098,   0
    l    0,          0.604248
    l   -0.725098,   0
    l    0,          1.2854
    l   -0.65918,    0

    m    0,         -1.889648
    l    0,         -2.420655
    l   -1.680908,   2.420655
    l    1.680908,   0 "

    android:strokeLineCap="square"
    android:strokeColor="#ffff00ff"
    android:fillColor="#ff0000ff"
    android:strokeWidth="0.2"/>

</vector>

创建一个空白 xml 文件并将上述内容复制到其中。然后你应该看到带有洋红色轮廓和蓝色填充的数字 4(两次)。我在这里做了,显示很清晰。我不知道提问者提到的模糊的原因。

于 2018-04-02T03:38:38.103 回答
0

VectorDrawable填充规则始终为非零且无法更改。如果最终填充了不应填充的区域,那是因为 SVG 图像是使用奇偶规则创建的。有两种方法可以解决这个问题:在矢量图形软件中手动编辑 SVG 或在您的应用程序中使用BetterVectorDrawable库。

在这里阅读更多

于 2015-09-10T11:46:53.593 回答