我使用Sketch软件构建svg图像以在我的android项目中使用。我对此问题有疑问:
如您所见,图片还可以,我使用Chrome和Macos预览检查了预览。
当我尝试在Android Studio中导入SVG时,导入预览如下:
已填充的圈子中的减去的圈子消失了。导入日志给我发消息:
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!
有人知道我的导入会发生什么吗?
答案 0 :(得分:8)
导入使用Inkscape制作的.svg文件时,我遇到了类似的问题。似乎Android Studio导入器不支持某些属性。
我找到的最简单的方法是使用svg2android。不确定它如何处理Sketch .svg,但它似乎可以使用Inkscape中的文件。
如果其他人使用Inkscape,请不要忘记将文档大小设置为矢量大小“文件 - >文档属性...”,或者直接使用文本编辑器在文件中进行编辑。
答案 1 :(得分:2)
以下是:
就是这样!归功于@dineshbob medium blog
答案 2 :(得分:1)
答案 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的导入工具中是不受欢迎的。