Android vector.xml 本质是简化适配的SVG路径子集,需将d属性转为大写命令、显式闭合、统一绝对坐标,并用AS导入或工具辅助转换以确保兼容性。

Android 的 vector.xml 本质是用 XML 描述矢量图形,它不直接支持完整 SVG 标准,但能兼容大部分常见路径(d 属性)。关键在于把 SVG 的 中的 d 指令**简化、标准化、适配 Android 语法**,而不是逐字照搬。
SVG 路径转 vector.xml 的核心原则
Android VectorDrawable 只支持 SVG PathData 的子集,不支持:
– 变换(transform)、
– 非闭合路径的隐式闭合(需显式加 Z)、
– 相对指令混用(建议统一用大写绝对坐标)、
– 高级曲线如 h/v 简写(可转为 L)、q/t(建议转为 C 或 S)。
手动转换的实用步骤
-
提取原始 d 属性:从 SVG 文件中找到
这类内容 -
统一转为大写命令:Android 更稳定支持大写(
M,L,C,Z),小写相对指令容易出错 -
删除多余空格和换行:确保
d字符串是单行、无多余空格(逗号前后可留一个空格,但不要多个) -
检查闭合:如果原图是封闭图标(如箭头、心形),结尾必须有
Z;否则可能渲染异常或填充失效 -
缩放适配 viewport:把 SVG 的
viewBox="0 0 100 100"对应到 vector 的android:viewportWidth="100"和android:viewportHeight="100",保持比例一致
推荐工具链(省时避坑)
-
Android Studio 自带导入:右键
res/drawable→New → Vector Asset→ 选Local file (SVG, PSD),自动转并提示不支持项 - 在线转换器(谨慎用):如 svg2vector.com,上传 SVG 后生成 vector.xml,但需人工核对路径是否变形、颜色/填充是否丢失
-
命令行辅助(进阶):用
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 规则下准确表达图形意图”。多导几次、对比预览,比死磕语法更快。










