Android vector标签 PathData 画图超详解

2021-02-06  本文已影响0人  天堂守望者

SVG是一种矢量图格式,是Scalable Vector Graphics三个单词的首字母缩写。在xml文件中的标签是<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:fillColor="#FF000000"
        android:pathData="M22,16V4c0,-1.1 -0.9,-2 -2,-2H8c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2zm-11,-4l2.03,2.71L16,11l4,5H8l3,-4zM2,6v14c0,1.1 0.9,2 2,2h14v-2H4V6H2z" />
</vector>
其所画出的图形为    image

于此同时,android studio提供了丰富的图片资源,可以右键module,new->vector asset选择,如下:

image

是不是很羡慕这些酷酷的图形,当然自己也可以去动手去做。显而易见,上面例子的重点是在PathData里面的那一大窜数字:

android:pathData="M22,16V4c0,-1.1 -0.9,-2 -2,-2H8c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2zm-11,-4l2.03,2.71L16,11l4,5H8l3,-4zM2,6v14c0,1.1 0.9,2 2,2h14v-2H4V6H2z" />

xml文件中:

image

共有三个标签,下面就是<path>部分:

先慢慢学习一些基本的语法:

android:strokeWidth="10" 设置颜色和线宽

每个命令都有大小写形式,大写代表后面的参数是绝对坐标,小写表示相对坐标,相对于上一个点的位置。参数之间用空格或逗号隔开。

命令详解:

L的用法:

把画笔放在(10,0)位置,连线10,40点 在连线40,40点。。。于是,一个直角三角形出来了~这里没有写z,没什么关系。


image

Q和C的对比: 详细了解贝塞尔曲线:

http://www.cnblogs.com/jay-dong/archive/2012/09/26/2704188.html

Q
android:pathData="M0,0 q30,90 80,20"/>

image

控制点1,30,90 :
控制点2,80,20 :

C

C 第一控制点(0,0) 第二控制点(30,90) 结束点(80,20) 或 c 第一控制点 第二控制点 结束点

image

现在修改第一个控制点:

android:pathData=" M0,0 c50,0 30,90 80,20" />

image

a:

这么多 数字,怎么看啊,可以直接拉到下面看作用。

android:pathData=" M50,50 a10,5 0,1 0 1,0" />
以50,50为起点,逆时针画

椭圆图形,x轴半径10,y轴半径5

image

转动x轴~~~

android:pathData=" M50,50 a10,5 90,1 0 1,0" />

image

我想要椭圆上半段,此处修改为x轴半径的两倍
android:pathData=" M50,50 a10,5 90,1 0 20,0" />
椭圆左半段 android:pathData=" M50,50 a10,5 90 1 0 0 10" />

椭圆右半段
android:pathData=" M50,50 a10,5 90 1 1 0 10" />

<path
    android:fillColor="#fff70000"  下
       android:pathData=" M50,50 a10,5 0 1 0 1 0" />
    <path
        android:fillColor="#FFF22420" 上
        android:pathData=" M50,50 a10,5 0 1 1 1 0" />
    <path
        android:fillColor="#fff57000"右
        android:pathData=" M50,50 a10,5 0 1 1 1 1" />
    <path
        android:fillColor="#FF323243"左
        android:pathData=" M50,50 a10,5 0 1 0 0 1" />
image

出现上面的情况可以想到是因为,起始点50,50在椭圆中的位置不同。那么,再修改一下。

android:pathData=" M50,50 a10,5 0 1 1 0 7" /> 修改了右边椭圆的代码


image

现在取的是大弧度,所以看到这样的效果,如果 7改为10(也就是y轴半径的两倍)这刚好会在 一半的位置。

现在取小弧度看看,

android:pathData=" M50,50 a10,5 0 0 1 0 7" /> ,可以看到小弧度 顺时针画图。

image

再修改为逆时针,

android:pathData=" M50,50 a10,5 0 0 0 0 7" />

image

椭圆的属性 差不多讲解完成了,如下

android:pathData=" M50,50 a10,5 0 0 0 0 7" />

10,5 为椭圆x,y轴半径

第一个0 为 x轴旋转角度

第二个0 为取大小弧度,0为小,1为大

第三个0 为顺逆时针,0为逆1为顺

第四个0 为修改修改起始点在椭圆中的位置,y轴.

第四个 7 为修改修改起始点在椭圆中的位置,x轴。

这是前辈留下的图:

image

<path>里面还有哪些属性那?

image

下面详细讲一下 android:strokeLineCap ****,android:strokeLineJoin 两个属性

android:pathData="M200,200 l100,300
      M300,200 l-100,300

再没有添加这两条属性前:

image

添加语句:android:strokeLineCap="round" 后可以看到有三个点改变了格式(左下角是图形结束点,并没有改变)

image

最后添加:android:strokeLineJoin="round" 左下角也做了改变,如下

image

这xml开始部分的代码是做什么的那?

<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportHeight="24.0" android:viewportWidth="24.0">

先看看有哪些属性,

image

<group>里面可以定义多了<path>,这样可以方便管理多个<path>

image

<clip-path>定义当前绘制的剪切路径,就是图像的一部分剪切下来。注意,clip-path 只对当前的 group 和子 group 有效。

image

<clip-path android:pathData="M200,200 h200 v150 h-200 v-150" />
原图为上面的 叉 ,剪切后为:

image

终,下次为动画的制作。有部分是前人的功劳~铭记。

转载 https://www.cnblogs.com/yuhanghzsd/p/5466846.html

上一篇 下一篇

猜你喜欢

热点阅读