2019独角兽企业重金招聘Python工程师标准>>>

Android--Vector


What is it ?

说到androidvector, 就要首先明白什么是Vector & SVG,

Vector: 矢量图形是计算机图形学中用点、直线或者多边形等基于数学方程的几何图元表示图像。矢量图形与使用像素表示图像的位图不同。 SVG: 是一种基于可扩展标记语言(XML),用于描述二维矢量图形的图形格式。SVG由W3C制定,是一个开放标准。

Why we use it ?

优点:

  • 占用空间小, 对比bitmap而言,天生具有优势
  • 放大不会出现失真现象, 完美适配

缺点:

  • 对设计师来讲, 学习导图工作成本增加了
  • 不适合复杂的图片(产出/时间投入比较高)

How we use it ?

0x01 定义一个vector

<vector xmlns:android="http://schemas.android.com/apk/res/android"      android:width="24dp"android:height="24dp" android:viewportHeight="24.0"android:viewportWidth="24.0"><path android:name="path1"android:pathData="M24,0L0,24 M0,0L24,24z"android:strokeColor="#ff0000"android:strokeWidth="1"/>
</vector>

与之对应的SVG:

<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M 24, 0 L 0,24" style="fill: none; stroke: red;"/><path d="M 0, 0 L 24,24" style="fill: none; stroke: red;"/>
</svg>
  • width & height 定义了drawable大小
  • viewportWidth & viewportHeight 定义了了Vector画布大小
  • pathData定义了Vector的路径. 对应SVG文件的d属性

0x02 vector 命令说明

命令 参数 说明
<font color='#CCFF99'>M</font> (x y)+ moveto 移动到
<font color='#CCFF99'>Z</font> none  closepath 关闭路径
<font color='#88DD66'>L</font> (x y)+ lineto 连接到
<font color='#88DD66'>H</font> x+ horizontal lineto 水平线到 x+
<font color='#88DD66'>V</font> y+ vertical lineto 垂直线到 y+
<font color='#229922'>C</font> (x1 y1 x2 y2 x y)+ curveto  三次贝塞尔曲线到
<font color='#229922'>S</font> (x2 y2 x y)+ smooth curveto  光滑三次贝塞尔曲线到
<font color='#229922'>Q</font> (x1 y1 x y)+ uadratic Bézier curveto 二次贝塞尔曲线到
<font color='#229922'>T</font> (x y)+ smooth quadratic Bézier curveto 光滑二次贝塞尔曲线到
<font color='#005500'>A</font> (rx ry x-axis-rotation large-arc-flag sweep-flag x y)+ elliptical arc  椭圆弧
<font color='#005500'>R</font> x1 y1 (x y)+ Catmull-Rom曲线
  • 其中M,Z比较好理解
  • L, H, V是除了M,Z最好用的指令.
  • C,S,Q,T是比较难理解,难用的指令, 本次一介绍Q,T为例
  • A,R 本次不做介绍

参考这篇文章介绍的更为生动详细点我

0x03 小试牛刀

掌握了0x02的一些基本命令后, 我们可以小试牛刀了....

1. 绘制<i class="icon-ok" ></i>

 <vector xmlns:android="http://schemas.android.com/apk/res/android"android:width="24dp"android:height="24dp"android:viewportHeight="24.0"android:viewportWidth="24.0"><path android:name="path1"android:pathData="M6,18 L12,24 24,0"android:strokeColor="#ff0000"android:strokeWidth="1"/>
</vector>
2. 绘制<i class="icon-bookmark"></i>

<vector xmlns:android="http://schemas.android.com/apk/res/android"android:width="24dp"android:height="24dp"android:viewportHeight="24.0"android:viewportWidth="24.0"><path android:name="path1"android:pathData="M12,12 L0,24 V0 H24 V24z"android:strokeColor="#ff0000"android:strokeLineJoin="round"android:strokeWidth="4"/>
</vector>

注意这里采用了fillColor填充整个path, 也可以同时设置strokeColor & strokeWidth来显示路径轮廓.

3. 绘制<i class="icon-check-empty"></i> 带圆角的矩形 Q命令

Q命令式意图 对应的指令和参数是:

Q x1 y1, x y

<vector xmlns:android="http://schemas.android.com/apk/res/android"android:width="24dp"android:height="24dp"android:viewportHeight="24.0"android:viewportWidth="24.0"><path android:name="path1"android:pathData="M0,4 Q0,0 4,0 H20 Q24,0 24,4 V20 Q24,24 20,24 H4 Q0,24 0,20Z"android:strokeColor="#ff0000"android:strokeLineJoin="round"android:strokeWidth="1"/>
</vector>

绘制思路 假设圆角为4

  1. 绘制左上角圆角 M0,4 Q,0 4,0
  2. 连线到右上角并且话圆角 H20 Q24,0 24,0 ....
4. 绘制<i class="icon-smile"></i> icon-smileQ, T命令

T命令式意图 对应的指令和参数是:

T x y

<vector xmlns:android="http://schemas.android.com/apk/res/android"android:width="24dp"android:height="24dp"android:viewportHeight="24.0"android:viewportWidth="24.0"><pathandroid:name="pathEyeLeft"android:fillColor="#ff0000"android:pathData="M6,6 H8 V8 H6 V6Z"/><pathandroid:name="pathEyerRight"android:fillColor="#ff0000"android:pathData="M16,6 H18 V8 H16 V6Z"/><pathandroid:name="pathEyerMouth"android:pathData="M6,14 Q12,20 18,14"android:strokeColor="#ff0000"android:strokeWidth="1"/><pathandroid:name="pathOutLine"android:pathData="M0,12 Q0,0 12,0 T 24,12 12,24 0,12"android:strokeColor="#ff0000"android:strokeWidth="1"/></vector>

外轮廓的圆

<pathandroid:name="pathOutLine"android:pathData="M0,12 Q0,0 12,0 T 24,12 12,24 0,12"android:strokeColor="#ff0000"android:strokeWidth="1"/>
5. 绘制<i class="icon-circle"></i> icon-smile A命令

对应的指令和参数是:

A rx ry x-axis-rotation large-arc-flag sweep-flag x y

参数 取值范围 说明
rx, ry double 圆弧的中心点
x-axis-rotation 度数 x轴旋转角度
large-arc-flag 0, 1 0表示小角度弧,1表示大角度
sweep-flag 0, 1 弧线方向,0逆时针,1沿顺时针
x, y double 圆弧的终点
<vectorxmlns:android="http://schemas.android.com/apk/res/android"android:width="200dp"android:height="200dp"android:viewportHeight="100"android:viewportWidth="100"><pathandroid:fillColor="#ff0000"android:pathData="M2,50 A 48,48 0 1 0 98,50 A 48,48 0 1 0 2,50z"/>
</vector>

####参考: Markdown命令 <br/> SVG介绍

转载于:https://my.oschina.net/u/2462463/blog/746389

AndroidVector初探相关推荐

  1. 2021年大数据Flink(九):Flink原理初探

    Flink原理初探 Flink角色分工 在实际生产中,Flink 都是以集群在运行,在运行的过程中包含了两类进程. JobManager: 它扮演的是集群管理者的角色,负责调度任务.协调 checkp ...

  2. 从壹开始微服务 [ DDD ] 之一 ║ D3模式设计初探 与 我的计划书

    缘起 哈喽大家周四好!又是开心的一天,时间过的真快,我们的 <从壹开始 .net core 2.1 + vue 2.5 >前后端分离系列共 34 篇已经完结了,当然以后肯定还会有更新和修改 ...

  3. 经典算法研究系列:二、Dijkstra 算法初探

    经典算法研究系列:二.Dijkstra 算法初探  July   二零一一年一月 ====================== 本文主要参考:算法导论 第二版.维基百科. 写的不好之处,还望见谅. 本 ...

  4. las格式测井曲线_邹榕,等:顺北和托甫台区块奥陶系断裂结构单元测井响应特征初探...

    引用格式:邹榕,徐中祥,张晓明,等.顺北和托甫台区块奥陶系断裂结构单测井响应特征初探[J].油气藏评价与开发,2020,10(2):18-23.ZOUR, XU Z X, ZHANG X M, et ...

  5. 2018-4-15摘录笔记,《网络表征学习前沿与实践》 崔鹏以及《网络表征学习中的基本问题初探》 王啸 崔鹏 朱文武

    1.来源:<网络表征学习前沿与实践>  崔鹏 (1)随着数据的增加以及计算机计算速度的增加,想当然的以为速度快了,数据再多也是可以自己算的,但是若是数据之间存在着复杂的关系,那么处理一个样 ...

  6. python argparse_Python 命令行之旅:初探 argparse

    本文首发于 HelloGitHub 公众号,并发表于 Prodesire 博客. 前言 你是否好奇过在命令行中敲入一段命令后,它是如何被解析执行的?是否考虑过由自己实现一个命令行工具,帮你执行和处理任 ...

  7. HTML5+MUI+HBuilder 之初探情人

    07,08年那会儿正当Java火爆,C/C++仍是广泛运用的一门语言的时候,所以我的大学都献给了C/C++和Java.当诺基亚的倒闭成为按键机时代衰落的标志时,移动APP的开发也如破堤之洪.爆炸式的崛 ...

  8. 使用Mahout搭建推荐系统之入门篇3-Mahout源码初探

    2019独角兽企业重金招聘Python工程师标准>>> 用意: 希望了解Mahout中数据的存储方式, 它如何避免java object带来的冗余开销.学完知识,要进行些实战 去分析 ...

  9. SAP RETAIL 补货类型RF之初探 II

    SAP RETAIL 补货类型RF之初探 II 1, 补货参数 – TargetCoverage字段不能为空. 如果不维护这个参数值,系统会提示:Target stock calculated dyn ...

最新文章

  1. linux脚本重定向到输入,linux shell输入输出重定向
  2. 树莓派基于 Linux 的 Windows XP 现已可用
  3. 多线程设计模式(四):生产者-消费模式
  4. 互联网晚报 | 1月29日 星期六 | 支付宝相互宝正式关停;大钲资本成瑞幸咖啡实控人;苹果创有史以来最高单季营收...
  5. C语言课后习题(32)
  6. P1022 计算器的改良
  7. 【运动学】基于matlab GUI最小半径泊车方法仿真【含Matlab源码 690期】
  8. Pygame安装教程及基本配置(详细图文)
  9. 真win10官方原版ISO下载方法
  10. 如何把后缀为.mdf的文件打开
  11. STM32模拟I2C程序
  12. 安卓如何查找应用的安装包目录?
  13. 曲面细分着色器---细分二维四边形
  14. uml sequence diagram
  15. 对前端工程化、模块化、组件化开发的理解
  16. Entity Framework学习笔记——EF简介(一篇文章告诉你什么是EF)
  17. 如何统计每个小时用户在线人数?
  18. 在DW中制作网页中的表格
  19. SpringBoot上传文件并储存到本地(记录)
  20. STM32MP157高性能微处理器产品介绍

热门文章

  1. Angular JS 列表修改
  2. Postman的新手教学,一学就会!
  3. Maven 模块管理
  4. 数据库-Linux系统下的命令
  5. python 规则引擎 drools_Drools规则引擎详解-常用的drl实例
  6. 利用指针数组计算2个3行4列矩阵的和_[剑指 Offer] 04. 二维数组中的查找
  7. linux删除文件夹命令6,Linux下创建、删除文件和文件夹命令
  8. mysql 数据备份方案_MySQL常见备份方案
  9. 蓝牙广播错误码3_蓝牙简介—物理层(PHY)
  10. linux过去硬件设备状态,Linux 设备模型基本概念 (一)