【问题标题】:Broken vector drawable with android fillType = evenOdd使用android fillType = evenOdd 绘制的破碎矢量
【发布时间】:2018-04-26 04:14:10
【问题描述】:
android:fillType="evenOdd" 

使矢量绘图在 Android 21 上损坏,我们可以修复这个矢量吗?

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

【问题讨论】:

  • fillType 是 API24+,因此它自然会被以下任何版本忽略。
  • 反向后会改变pathData并移除android:fillType

标签: android svg vector android-vectordrawable


【解决方案1】:

来自 Zach Sperske 的更新 2021 解决方案 0

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

解决方案 1

Sketch 中扁平化图像并使用this site 将SVG 转换为Android 的xml

解决方案 2

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

解决方案 3

PNG

TLDR

经过一番研究,我发现矢量图形、SVG 有两种填充规则属性方法,“偶数”与“非零”

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

从主菜单中,选择图层 → 路径 → 逆序。我在图标顶部找到了洞,并且在应用程序中也找到了洞。

For more detail

【讨论】:

  • 我相信现在有更好的解决方案:在你的 defaultConfig in build.gradle vectorDrawables { useSupportLibrary = true } implementation("androidx.appcompat:appcompat:1.2.0")
  • @ZachSperske 为您添加了您的解决方案
猜你喜欢
  • 2017-05-02
  • 1970-01-01
  • 1970-01-01
  • 2017-08-04
  • 1970-01-01
  • 2021-11-04
  • 2019-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多