android fillType = evenOdd 可绘制的破损矢量

Broken vector drawable with android fillType = evenOdd

android:fillType="evenOdd" 

在 Android 21 上使 vectror drawable 损坏,无论如何我们可以修复这个 vector 吗?

我还反编译了 release.apk,发现它们删除了 android:fillType="evenOdd",甚至在 debug.apk 上它也有
android:fillType="evenOdd" 但在应用程序上仍然显示损坏的图片

Zach Sperske 更新 2021 Solution0

在你的 defaultConfig in build.gradle vectorDrawables { useSupportLibrary = true } implementation("androidx.appcompat:appcompat:1.2.0")

解决方案 1

扁平化 Sketch and use this site 中的图像以将 SVG 转换为 xml Android

解决方案 2

我使用 nonZero 而不是 evenOdd,并在 Sketch 中打开它以反转顺序,反转后它会更改 pathData 并删除 android:fillType,并且在 Android 21+ 上一切正常。

解决方案 3

PNG

TLDR

经过一些研究,我发现矢量图形、SVG 有两种填充规则 属性 方法,“evenodd”与“nonzero”

我在 Sketch 中打开 SVG 图标并检查了图标顶部的孔。正如预期的那样,它使用 fill-rule:evenodd 属性。现在我必须更改填充规则以使用“非零”属性。如何? Select 路径。在右侧,“填充”属性 处有一个设置图标。单击它并选择“非零”。

从主菜单中,选择图层 → 路径 → 反转顺序。我把图标顶部的洞弄回来了,在应用程序中也弄了个洞。

For more detail