SVG文件和Android Studio矢量资产之间的不一致

时间:2016-04-06 14:03:21

标签: android-studio svg

我使用Sketch软件构建svg图像以在我的android项目中使用。我对此问题有疑问:

enter image description here

如您所见,图片还可以,我使用Chrome和Macos预览检查了预览。

当我尝试在Android Studio中导入SVG时,导入预览如下:

enter image description here

已填充的圈子中的减去的圈子消失了。导入日志给我发消息:

In ic_percent.svg:
WARNING@ line 10 We don't scale the stroke width!
WARNING@ line 11 We don't scale the stroke width!
WARNING@ line 12 We don't scale the stroke width!
WARNING@ line 13 We don't scale the stroke width!

有人知道我的导入会发生什么吗?

6 个答案:

答案 0 :(得分:8)

导入使用Inkscape制作的.svg文件时,我遇到了类似的问题。似乎Android Studio导入器不支持某些属性。

我找到的最简单的方法是使用svg2android。不确定它如何处理Sketch .svg,但它似乎可以使用Inkscape中的文件。

如果其他人使用Inkscape,请不要忘记将文档大小设置为矢量大小“文件 - >文档属性...”,或者直接使用文本编辑器在文件中进行编辑。

答案 1 :(得分:2)

以下是:

  1. 在草图中打开.svg
  2. 选择页面列表中缺少圆圈。就我而言,它看起来像这样。
  3. Page List

    1. 单击填充(齿轮形图标)并将偶数奇数更改为非零
    2. Fills

      1. 打开图层菜单 - >路径 - >逆序
      2. Reverse order

        1. 将形状导回回.svg格式
        2. Export

          1. 将.svg转换为Vector Drawable(来自Android Studio或第三方工具)
          2. 就是这样!归功于@dineshbob medium blog

答案 2 :(得分:1)

在Inkscape中,您可以选择a.s.o行。使用笔画宽度并在保存为sgv之前将它们转换为路径:

enter image description here

答案 3 :(得分:0)

简短答案:取消对SVG中所有内容的分组,确保没有图层变换和重新保存。

长答案:每个笔划都有宽度,它是数字,并在SVG中编码为

<path style="...;stroke-width=1.5;...">

同时,每个笔画都是一个对象,为了便于编辑,可以将对象分组。组也是对象,因此可以进行分组,以便组可以具有嵌套组。 最重要的是,组具有转换,这些转换是在矢量编辑器中移动或缩放或旋转分组的对象(例如路径)时创建的,并在SVG中编码为

<g transform="...">
  <path .../>
  <path .../>
  <some other object .../>
</g>

“ transform”属性可以是“矩阵”,也可以是线性变换序列(例如“ rotate”或“ translate”)或其他任何东西,在这种情况下无关紧要。组中的所有变换都将应用于所有包含的对象属性。

因此,将“ transform”组应用于所包含的路径“ stroke-width”。

这正是Android Studio不支持的内容。

解决方案很简单:取消所有组的组合,并强制矢量编辑器将变换应用于真实的几何对象。然后再次导出。

结果文件中仍然会有组,这很好-这是在SVG中存储图层的唯一方法。只要确保文件中的图层没有应用转换即可。很有可能您不需要为此做任何事情,因为绝大多数矢量编辑器只能对它们产生视觉效果,而没有几何效果。

就是这样。

一个非常简单的文件示例,它将破坏Android Studio的导入。这只是两个随机的笔触,用鼠标分组和缩放:

<g
     inkscape:label="Layer 1"
     inkscape:groupmode="layer"
     id="layer1">
    <g
       id="g821"
       transform="matrix(0.74621726,0,0,1.3160501,48.238048,-10.434556)">
      <path
         inkscape:connector-curvature="0"
         id="path815"
         d="m 58.964284,69.458334 31.75,-5.291667"
         style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
      <path
         inkscape:connector-curvature="0"
         id="path817"
         d="M 77.863093,95.160713 112.6369,77.017855"
         style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
    </g>

取消分组后的同一作品对Android Studio来说是很好的

<g
     inkscape:label="Layer 1"
     inkscape:groupmode="layer"
     id="layer1">
    <path
       style="fill:none;stroke:#000000;stroke-width:0.26219916px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
       d="M 92.238214,80.976091 115.93061,74.011993"
       id="path815"
       inkscape:connector-curvature="0" />
    <path
       style="fill:none;stroke:#000000;stroke-width:0.26219916px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
       d="M 106.34083,114.80171 132.28965,90.9248"
       id="path817"
       inkscape:connector-curvature="0" />
  </g>

答案 4 :(得分:0)

以svg格式导出矢量图形时,我遇到了同样的问题。 但是,Android Studio在导入矢量图形时也可以处理psd文件格式。在导出过程中将文件格式设置为psd之后,导入android studio对我来说效果很好。

答案 5 :(得分:-1)

我使用inkscape遇到了同样的问题。不确定是否可以与Sketch一起使用,但是尝试起来很简单。

只需启动一个新的Sketch项目并粘贴上一个项目中的矢量即可。这解决了我在Inkscape上遇到的相同问题。似乎在图片创建过程中使用的一些额外属性在android的导入工具中是不受欢迎的。