You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查询Android VectorDrawable规范及Android支持的SVG命令清单

我之前在替换PNG为VectorDrawable时也踩过一模一样的坑!Android的VectorDrawable并没有实现完整的SVG行业规范,只支持一个子集,下面就给你整理清楚Android Studio支持的所有SVG命令、元素,以及需要避开的坑:

Android VectorDrawable 支持的SVG子集详解

1. 核心路径命令(Path Commands)

所有基础的路径绘制命令都是支持的,包括绝对(大写)和相对(小写)形式:

  • M/m:移动到目标坐标(Move to)
  • L/l:绘制直线到目标坐标(Line to)
  • H/h:绘制水平直线到指定X坐标(Horizontal line to)
  • V/v:绘制垂直直线到指定Y坐标(Vertical line to)
  • C/c:三次贝塞尔曲线(Cubic Bézier curve),需要两个控制点+终点
  • S/s:平滑三次贝塞尔曲线(Smooth cubic Bézier curve),自动沿用前一个控制点的对称点
  • Q/q:二次贝塞尔曲线(Quadratic Bézier curve),需要一个控制点+终点
  • T/t:平滑二次贝塞尔曲线(Smooth quadratic Bézier curve)
  • Z/z:闭合当前路径(Close path)

2. 填充与描边属性

  • 支持基础填充:fill(颜色值)、fill-opacity(0-1的透明度)
  • 支持描边设置:stroke(颜色)、stroke-width(宽度)、stroke-opacity(透明度)、stroke-linecap(端点样式:butt/round/square)、stroke-linejoin(拐角样式:miter/round/bevel)、stroke-miterlimit(斜接限制)
  • ⚠️ 注意:填充规则仅支持nonzero(默认),不支持evenodd

3. 支持的SVG元素

除了<path>之外,还支持这些基础形状元素:

  • <rect>:矩形,支持rx/ry设置圆角
  • <circle>:圆形
  • <ellipse>:椭圆
  • <line>:直线
  • <polyline>:折线
  • <polygon>:多边形
  • <g>:分组元素,支持transform变换(平移、缩放、旋转)
  • <clipPath>:裁剪路径,但仅支持基于路径的裁剪,不支持复杂图形或文字裁剪
  • <linearGradient>/<radialGradient>:渐变填充,但有严格限制:
    • 渐变单位仅支持userSpaceOnUse,不支持objectBoundingBox
    • 渐变扩散方式仅支持pad,不支持reflect/repeat
    • 渐变停止点的offset必须是0到1之间的数值

4. 绝对不支持的SVG特性(避坑清单)

这些特性导入Android Studio后肯定会出问题,必须提前处理:

  • <text>:矢量文字元素,必须先转成路径再导入
  • <filter>/<mask>/<pattern>:各种特效、遮罩、图案填充元素
  • <image>:嵌入位图的元素(VectorDrawable是纯矢量,不支持混合位图)
  • 复杂的transform组合(比如3D变换)
  • SVG中的动画元素(<animate>等),Android VectorDrawable的动画需要用animated-vector单独实现

小技巧

如果导入外部SVG报错,可以试试这两种方法:

  1. 用Android Studio自带的Vector Asset Studio导入,它会自动尝试转换不兼容的部分(比如把文字转路径)
  2. 用专业SVG编辑工具(比如Inkscape)把不支持的元素手动转成路径,调整渐变属性后再导入

内容的提问来源于stack exchange,提问作者Hector

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 08:47:45