首先需要明确的是:Android不支持直接在项目中使用svg的图片。
但是Google在Android5.X中提供了两个新API来支持SVG:
- VectorDrawable
- AnimatedVectorDrawable
所以在Android中使用SVG的话,要区分5.0以上以及5.0以下的不同情况。
在Android Studio 使用SVG矢量图
在drawable文件夹上右键->new->Vector Asset
选择自带的图标或者从本地选取
android:viewportWidth与android:viewportHeight:是指当前Drawable对应的虚拟Canvas的大小, 之所以说是虚拟的是因为实际上并不存在这样一个Canvas, 又之所以需要这个值是因为在+ + 标签中的路径数据要基于具体的坐标系来绘制.
<vector>
是 VectorDrawable 对应的根标签
android:width与android:height:对应矢量图的实际大小
矢量图是可以无限大且不失真的, 但通常一个图片都会有一个原始大小,将在其父控件大小都设置为wrap_content时起作用)
基于加载性能考虑,Google推荐限定在 200x200dp 以内。
android:viewportWidth与android:viewportHeight是指当前Drawable对应的Canvas的大小,
一般与上面的android:width与android:height:成比例定义。
用于为<path/>
标签中的路径数据提供绘制位置的参考坐标系及绘制范围
<path/>
标签对应路径信息, 这里的path与我们自定义绘制图形时用的Path原理一样, 就是记录一些绘图操作, 具体对应其中的 pathData。
android:fillColor为默认黑色(#FF000000)时,在View容器内将使用tint颜色取代,否则将呈现为android:fillColor与tint的混合颜色。
<path/>
标签:对应路径信息, 这里的path与我们自定义绘制图形时用的Path原理一样, 就是记录一些绘图操作, 具体对应其中的pathData.PathData中对应的路径描述符号不需要我们去记, 通常情况下由绘图软件生成svg图片再从svg文件中提取.
<path/>
路径的路径描述指令含义表:
M = moveto 相当于 android Path 里的moveTo(),用于移动起始点
L = lineto 相当于 android Path 里的lineTo(),用于画线
H = horizontal lineto 用于画水平线
V = vertical lineto 用于画竖直线
C = curveto 相当于cubicTo(),三次贝塞尔曲线
S = smooth curveto 同样三次贝塞尔曲线,更平滑
Q = quadratic Belzier curve quadTo(),二次贝塞尔曲线
T = smooth quadratic Belzier curveto 同样二次贝塞尔曲线,更平滑
A = elliptical Arc 相当于arcTo(),用于画弧
Z = closepath 相当于closeTo(),关闭path
大写代表绝对位置, 小写代表相对位置
官方标准定义细则参考:SVG Paths Definition - W3C
矢量图创建完成后使用方法跟其他格式的图片用法一样。
我们这里提供三种解决方案: