Android vector.xml 本质是简化适配的SVG路径子集,需将d属性转为大写命令、显式闭合、统一绝对坐标,并用AS导入或工具辅助转换以确保兼容性。
Android 的 vector.xml 本质是用 XML 描述矢量图形,它不直接支持完整 SVG 标准,但能兼容大部分常见路径(d 属性)。关键在于把 SVG 的 中的 d 指令**简化、标准化、适配 Android 语法**,而不是逐字照搬。
Android VectorDrawable 只支持 SVG PathData 的子集,不支持:
– 变换(transform)、
– 非闭合路径的隐式闭合(需显式加 Z)、
– 相对指令混用(建议统一用大写绝对坐标)、
– 高级曲线如 h/v 简写(可转为 L)、q/t(建议转为 C 或 S)。
这类内容M, L, C, Z),小写相对指令容易出错d 字符串是单行、无多余空格(逗号前后可留一个空格,但不要多个)Z;否则可能渲染异常或填充失效viewBox="0 0 100 100" 对应到 vector 的 android:viewportWidth="100" 和 android:viewportHeight="100",保持比例一致res/drawable → New → Vector Asset → 选 Local file (SVG, PSD),自动转并提示不支持项svgo 先优化 SVG(移除注释、冗余 group、隐藏层),再导入 AS,减少转换失败率原始 SVG 片段:
转换后 vector.xml 中的 path:
android:pathData="M20 30 C30 35 40 45 40 60 L30 60 C30 52 24 45 20 45 Z"
说明:
– m → M(起点)
– c → C(三次贝塞尔,参数补全为 6 个)
– l → L(直线)
– 第二个 c 转为 C 并计算控制点(等价于 Android 支持的格式)
– 结尾加 Z 显式闭合
基本上就这些。重点不是“完全还原 SVG”,而是“在 VectorDrawable 规则下准确表达图形意图”。多导几次、对比预览,比死磕语法更快。