不支持使用ERROR @ <mask>的AndroidStudio导入SVG

时间:2018-03-26 09:39:24

标签: android-studio svg vector ide android-vectordrawable

尝试使用

导入SVG时收到消息"ERROR@ <mask> is not supported"
 Android Studio 3.0.1
Build #AI-171.4443003, built on November 10, 2017
JRE: 1.8.0_152-release-915-b08 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.12.6

无论如何要导入SVG并使它们正确显示?

4 个答案:

答案 0 :(得分:6)

解决方案1 ​​

Sketch中的Flattern图片并使用this site将SVG转换为适用于Android的xml

解决方案2

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

解决方案3

PNG

TLDR

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

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

从主菜单中,选择“图层”→“路径”→“反向顺序”。我在图标的顶部找到了一个洞,并在应用程序中找到了洞。

For more detail

答案 1 :(得分:5)

如果您拥有的是.svg文件,则可以手动操作.svg标记以删除蒙版并应用填充内联。

如果您正在与设计师合作,您可以让他们拍摄图标并移除面具内的任何内容,然后对图标应用填充。然后让设计器导出.svg文件并重新导入到Android Studio中。

当您尝试导入的资源从Sketch或其他设计软件导出时,并且图标是一个掩码(而不是填充),它将使用该标记导出。 Android Studio仅接受带有填充的.svg(这不是iOS的问题)

答案 2 :(得分:2)

  1. 打开SVG文件并删除mask元素。您可以保留use元素。
  2. 导入
  3. 打开导入的文件
  4. 删除具有fillType="evenOdd"的最后一个元素
  5. 更新android:fillType="nonZero"元素上的颜色

这当然取决于设计者如何导出资产,但是像这样的编辑路径通常总是可以将您带到您想要的位置。

答案 3 :(得分:0)

在我的情况下,这是Sketch中符号覆盖的结果,这是一项已知技术,可让您轻松更改符号的颜色。它要求您在符号(嵌套符号)内使用(彩色)符号作为遮罩。这是引起问题的面具。

我的解决方案是简单地创建原始符号的导出版本,然后在其中删除蒙版。