SVG(全称:可缩放矢量图形 Scalable Vector Graphics),是用于描述矢量图形的一种图形格式。
SVG是W3C制定的,是一个W3C开放标准(该标准是2001年由太阳微系统、Adobe、苹果公司、IBM 以及柯达联合制定的)。它主要有有以下几种特征:
- SVG 用来定义用于网络的基于矢量的图形
- SVG 使用 XML 格式定义图形
- SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失
- SVG 是万维网联盟的标准
- SVG 与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体
可惜的是Android官方目前(根据多方消息,估计不久会适配)对SVG格式的支持只是在Android 5.0 (LOLLIPOP) 以上,如果低版本需要使用SVG格式的图片,你需要使用第三方兼容包
google发布了大量开源的ICON图片来满足我们的基本设计需求,该项目的 github地址
这里以实现笑脸为例
"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android"
android:width="200dp"
android:height="200dp"
android:viewportHeight="100"
android:viewportWidth="100">
"#fbbc05"
android:pathData="M 50,50 m -48 ,0 a 48,48 0 1,0 96,0 a 48,48 0 1,0 -96,0"/>
"eye_left"
android:pathData="M 28,40 Q 36,30 43,40"
android:strokeColor="#000000"
android:strokeLineCap="round"
android:strokeWidth="4"/>
"eye_right"
android:pathData="M 58,40 Q 66,30 73,40"
android:strokeColor="#000000"
android:strokeLineCap="round"
android:strokeWidth="4"/>
"smile"
android:pathData="M 30,65 Q 50,85 70,65"
android:strokeColor="#000000"
android:strokeLineCap="round"
android:strokeWidth="4"/>
height width表示该SVG图形的具体大小
viewportHeight viewportWidth 表示SVG图形划分的比例
M = moveto (M X,Y) 相当于 android Path 里的moveTo(),用于移动起始点
L = lineto (L X,Y) 相当于 android Path 里的lineTo(),用于画线
H = horizontal lineto (H X) 用于画水平线
V = vertical lineto (V Y) 用于画竖直线
C = curveto (C X1,Y1,X2,Y2,ENDX,ENDY) 相当于cubicTo(),三次贝塞尔曲线
S = smooth curveto (S X2,Y2,ENDX,ENDY) 同样三次贝塞尔曲线,更平滑
Q = quadratic Belzier curve(Q X,Y,ENDX,ENDY) quadTo(),二次贝塞尔曲线
T = smooth quadratic Belzier curveto (T ENDX,ENDY) 同样二次贝塞尔曲线,更平滑
A = elliptical Arc (A RX,RY,XPRTATION,FLAG1,FLAG2,X,Y) 相当于arcTo(),用于画弧
Z = closepath() 相当于closeTo(),关闭path
更详细的请看svg官方语法