Android Studio导入Inkscape导出SVG报错:Gradient has no stop info
我来帮你搞定这个问题~从你提供的代码和错误信息来看,主要是Android Studio的SVG解析器对Inkscape导出的SVG兼容性问题,加上一些语法小错误导致的,咱们一步步来修复:
1. 先修复破坏标签结构的注释
你代码里的注释位置有问题,比如<radialGradient <!-- LINE 35-->这种写法会直接打断标签的完整性,Android的解析器根本没法正确识别这个radialGradient标签,自然也就找不到它引用的渐变停止信息。还有linearGradient里多余的-->也属于无效注释,得全部删掉。
2. 替换废弃的xlink:href为标准href
SVG 2.0已经废弃了带xlink:前缀的引用写法,而Android Studio的Vector Asset解析器对旧语法支持不佳。你需要把radialGradient里的xlink:href="#linearGradient11815"改成href="#linearGradient11815"。
3. 移除Inkscape专属扩展属性
Inkscape导出的SVG会自带一些它自己的属性(比如inkscape:collect="always"),这些属性Android完全不识别,还可能干扰解析过程,直接删掉所有以inkscape:开头的属性就行。
4. 保持stop标签的简洁格式
你已经把stop标签从style属性的写法改成了单独的stop-color和stop-opacity属性,这一步是对的,继续保持这个格式,不要用style聚合属性的写法,Android解析器对这种拆分后的属性支持更好。
修正后的示例代码
<defs id="defs11210"> <linearGradient id="linearGradient11815"> <stop stop-color="#69aeed" stop-opacity="1" offset="0" /> <stop stop-color="#66e6b2" stop-opacity="0.90909094" offset="1" /> </linearGradient> <radialGradient href="#linearGradient11815" id="radialGradient928" cx="99.615288" cy="233.88142" fx="99.615288" fy="233.88142" r="80.842598" gradientTransform="matrix(1,0,0,1.3440437,0,-80.46542)" gradientUnits="userSpaceOnUse" /> </defs>
如果做完这些还是有问题,可以试试用SVG优化工具把SVG里的冗余内容清理一遍,再导入Android Studio的Vector Asset。
内容的提问来源于stack exchange,提问作者Paweł Bęza

