突然對Android的Vector來了興趣,細細查閱資料,發(fā)現(xiàn)挺好玩的。先指明幾個問題
vector中的width是整體寬度,height是整體高度,viewportHeight是豎直單位(這里分了100份),下面的pathData的數(shù)字也是根據(jù)這個單位進行定位的,viewportWidth也是一樣,pathData指令大寫字母是指的絕對定位,小寫字母是指的相對于當前坐標的相對定位。逆時針的時候也會對當前顏色取反哦,試試就知道了。
補充一下這幾個常用指令
M = moveto(M X,Y) :將畫筆移動到指定的坐標位置
L = lineto(L X,Y) :畫直線到指定的坐標位置
H = horizontal lineto(H X):畫水平線到指定的X坐標位置
V = vertical lineto(V Y):畫垂直線到指定的Y坐標位置
C = curveto(C X1,Y1,X2,Y2,ENDX,ENDY):三次貝賽曲線
S = smooth curveto(S X2,Y2,ENDX,ENDY)
Q = quadratic Belzier curve(Q X,Y,ENDX,ENDY):二次貝賽曲線
T = smooth quadratic Belzier curveto(T ENDX,ENDY):映射
A = elliptical Arc(A RX,RY,XROTATION,FLAG1,FLAG2,X,Y):弧線
Z = closepath():關(guān)閉路徑
針對先試寫幾個案例,再補充
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="50dp"
android:height="50dp"
android:viewportHeight="100"
android:viewportWidth="100">
<path
android:fillColor="@color/colorAccent"
android:pathData="M15,10 L85,10 Q90,10 90,15 L90,85 Q90,90 85,90 L15,90 Q10,90 10,85 L10,15 Q10,10 15,10 M30,30 L30,60 L60,60 L60 30" />
</vector>
隨便畫的,可以自行嘗試其他的好看的效果
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="50dp"
android:height="50dp"
android:viewportHeight="100"
android:viewportWidth="100">
<path
android:fillColor="@color/colorAccent"
android:pathData="M20,50 A25,25 0 1,1 50 50 A25,25 0 0,1 20 50" />
</vector>
![OBBN@DNUBMF9
4]K%~X%72.png](http://upload-images.jianshu.io/upload_images/648488-4f63d3c7ff313803.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
這個是我用的A命令實現(xiàn)的一個圓形,先看看這幾個參數(shù)的意義
a rx,ry x-axis-rotation large-arc-flag,sweepflag dx,dy
rx ry 橢圓半徑
x-axis-rotation x軸旋轉(zhuǎn)角度
large-arc-flag 為0時表示取小弧度,1時取大弧度(要長的還是短的)
sweep-flag 0取逆時針方向,1取順時針方向
x,y (dx,dy) 終點的位置
這里我使用了一個技巧就是先選了一個大弧度,再折回來畫了一個小弧度,就合成了一個完整的弧形了。自己拿著這些個指令敲一下試試,還會有意想不到的驚喜。另外還可以支持動態(tài)的vector,動畫效果很流暢,嘗試之后再補充。