如何创建可用作 Android Vector-Drawable 的正确矢量图像?

平面设计 向量 墨景 图标 svg 安卓
2022-02-07 19:49:36

我对创建矢量图像很陌生。我开始学习如何创建它们,因为我需要一些用于我目前正在开发的 Android 应用程序的自定义图标。问题就从这里开始了。我正在使用 Inkscape 创建图标,当我尝试使用 Android Studio 将它们转换为 VectorDrawable 时,它​​返回有关不支持某些内容的错误:

ERROR@ line 22 <defs> is not supported
WARNING@ line 139 We don't scale the stroke width!
WARNING@ line 144 We don't scale the stroke width!
WARNING@ line 150 We don't scale the stroke width!
WARNING@ line 156 We don't scale the stroke width!
WARNING@ line 162 We don't scale the stroke width!
WARNING@ line 168 We don't scale the stroke width!
WARNING@ line 174 We don't scale the stroke width!

我首先尝试以某种方式将路径转换为 ​​Inkscape 中的对象,但这没有奏效。然后我在网上找了一些解决方案,找到了以下网站:http: //inloop.github.io/svg2android/ 在那里我可以转换图标,但现在我只能使用它 android 7.0 及更高版本,因为我使用了属性'填充规则:偶数'。

现在这是我的问题:如何确保在创建图标时只使用正确的属性以及如何使我的图标在 android 上工作?

如果您想按照我的尝试解决问题,可以在这里下载我的 SVG 文件:https ://dl.dropboxusercontent.com/u/213285061/Foren/Biologie_Icon.svg

谢谢你的每一个建议。

1个回答

解决方案

在 Inkscape 中另存为“普通 SVG”。

注意:从 Inkscape 0.91 开始,如果您保存为“Plain SVG”,然后只是执行普通的“保存”,它将再次保存为 Inkscape SVG。因此,您每次都需要保存并明确选择纯 SVG。

有关 SVG 到 VectorDrawable 转换的相关问题:Inkscape export XML for Android drawable resource directory

解释

Inkscape 的默认保存格式是“Inkscape SVG”,这是一个符合 SVG 1.1 标准的普通 SVG 文件,以及 Inkscape 在inkscape命名空间中使用的元数据和附加信息。

那是完全有效的 SVG,大多数像浏览器这样的渲染程序都没有问题。听起来您从 SVG 转换为 VectorDrawable XML 的工作流程阻塞了 Inkscape 特定的代码(尽管<defs>是有效的 vanilla SVG)。

另存为“普通 SVG”会删除所有额外的数据和任何不在 SVG 标准中的功能。这将导致与其他程序(如您的程序)更好的兼容性,但您可能会丢失一些信息,具体取决于绘图。

要避免的特征

到目前为止,人们使用的最常见的非标准 SVG 功能是文本流。这些是通过拖动来创建一个文本框(而不是仅仅单击)来创建的。SVG 不支持环绕文本——许多程序会忽略文本。

Text菜单中,Inkscape 中有一个用于将文本流转换为普通 SVG 文本对象的选项。

在大多数情况下,违规元素可以只转换为路径。

调整输出

除了使用“Plain SVG”之外,还有一些其他功能可以调整 Inkscape 输出中的 SVG 树。

  • 文件菜单上,单击文档清理这摆脱了未使用的 defs 和其他元数据。
  • 编辑菜单上,单击首选项Input/Output部分,有几个选项可以更改 XML