Android Vector Drawable | SVG 矢量图

Android Vector Drawable | SVG 矢量图

What is SVG

SVG(全称:可缩放矢量图形 Scalable Vector Graphics),是用于描述矢量图形的一种图形格式。
SVG是W3C制定的,是一个W3C开放标准(该标准是2001年由太阳微系统、Adobe、苹果公司、IBM 以及柯达联合制定的)。它主要有有以下几种特征:
- SVG 用来定义用于网络的基于矢量的图形
- SVG 使用 XML 格式定义图形
- SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失
- SVG 是万维网联盟的标准
- SVG 与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体

这里写图片描述这里写图片描述

这里写图片描述这里写图片描述

有哪些优点

  • SVG 可被非常多的工具读取和修改(比如记事本)
  • SVG 与 JPEG 和 GIF 图像比起来,尺寸更小,且可压缩性更强。
  • SVG 是可伸缩的
  • SVG 图像可在任何的分辨率下被高质量地打印
  • SVG 可在图像质量不下降的情况下被放大
  • SVG 图像中的文本是可选的,同时也是可搜索的(很适合制作地图)
  • SVG 可以与 Java 技术一起运行
  • SVG 是开放的标准
  • SVG 文件是纯粹的 XML

可惜的是Android官方目前(根据多方消息,估计不久会适配)对SVG格式的支持只是在Android 5.0 (LOLLIPOP) 以上,如果低版本需要使用SVG格式的图片,你需要使用第三方兼容包

如何实现?

1.使用系统提供的

这里写图片描述
这里写图片描述

google发布了大量开源的ICON图片来满足我们的基本设计需求,该项目的 github地址

2.自定义SVG

这里以实现笑脸为例

这里写图片描述

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="200dp"
        android:height="200dp"
        android:viewportHeight="100"
        android:viewportWidth="100">
    <path
        android:fillColor="#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"/>
    <path
        android:name="eye_left"
        android:pathData="M 28,40 Q 36,30 43,40"
        android:strokeColor="#000000"
        android:strokeLineCap="round"
        android:strokeWidth="4"/>
    <path
        android:name="eye_right"
        android:pathData="M 58,40 Q 66,30 73,40"
        android:strokeColor="#000000"
        android:strokeLineCap="round"
        android:strokeWidth="4"/>
    <path
        android:name="smile"
        android:pathData="M 30,65 Q 50,85 70,65"
        android:strokeColor="#000000"
        android:strokeLineCap="round"
        android:strokeWidth="4"/>
</vector>

height width表示该SVG图形的具体大小

viewportHeight viewportWidth 表示SVG图形划分的比例

语法

path标签
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常用指令
  • A
    1.RX,RY 椭圆的半径大小
    2.椭圆的X轴与水平方向顺时针方向夹角
    3.1:大角度弧线 0:小角度弧线
    4.1:顺时针方向 0:逆时针方向
    5.X,Y 终点坐标

更详细的请看svg官方语法

完整代码点我下载GitHub

Thank you

  • 以上仅本人学习中遇到的问题,如有更多意见欢迎随时交流 issues
  • email:coderguoy@gmail.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值