Android的vector.xml怎么写 SVG路径转换方法

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(建议转为 CS)。

手动转换的实用步骤

  • 提取原始 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/drawableNew → 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"

说明:
mM(起点)
cC(三次贝塞尔,参数补全为 6 个)
lL(直线)
– 第二个 c 转为 C 并计算控制点(等价于 Android 支持的格式)
– 结尾加 Z 显式闭合

基本上就这些。重点不是“完全还原 SVG”,而是“在 VectorDrawable 规则下准确表达图形意图”。多导几次、对比预览,比死磕语法更快。