http://blog.csdn.net/xu_fu/article/details/44004841
M: move to 移動繪制點L:line to 直線Z:close 閉合C:cubic bezier 三次貝塞爾曲線Q:quatratic bezier 二次貝塞爾曲線A:ellipse 圓弧 每個命令都有大小寫形式,大寫代表后面的參數是絕對坐標,小寫表示相對坐標。參數之間用空格或逗號隔開 命令詳解:M (x y) 移動到x,yL (x y) 直線連到x,y,還有簡化命令H(x) 水平連接、V(y)垂直連接Z,沒有參數,連接起點和終點C(x1 y1 x2 y2 x y),控制點x1,y1 x2,y2,終點x,yQ(x1 y1 x y),控制點x1,y1,終點x,yA(rx ry x-axis-rotation large-arc-flag sweep-flag x y) ?rx ry 橢圓半徑 ?x-axis-rotation x軸旋轉角度 ?large-arc-flag 為0時表示取小弧度,1時取大弧度 ?sweep-flag 0取逆時針方向,1取順時針方向以上來自前輩的總結,我的正文在下面:
M的使用格式:M x,y x,y x,y ….可以有無數對坐標(注:x和y表示坐標) 但是如果你單純這樣的寫,是看不出來有什么圖形的,因為M命令只是在標注一個一個的點,并沒有把點繪制出來,因為我們這是在繪制矢量圖而不是像canvas一樣在繪制位圖,所以我們標注的點并不會出現在屏幕上,那么怎么做呢?可以先這樣寫 (M x,y x,y x,y…Z),然后看看效果,再繼續往下看
Z的使用格式:直接加在繪制命令的最后 剛剛試過的小伙伴應該是知道了,只要加上Z命令,之前被M標注的點位就會被依次連接起來(到最后一個點時會將其與第一個點連接),最終成為一個封閉圖形。
A的使用格式:它的參數比較多,一個個說比較難講清楚,我們直接上代碼
<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="@color/white"? android:pathData="M12,12 a3.2,3.2 0,1 0,1 0 "/></vector>首先M指令將畫筆的起始位置置于12,12這個坐標 ,隨后a3.2,3.2表示從圓心開始算,在X軸上的半徑和Y軸上的半徑(自己改動一下這兩個參數比較好理解),再往后的0,1 0這三個參數我們一會再說,先直接看到最后的1 0,這兩個參數表示偏移量(或者說另一個坐標,但不是圓心),意思就是從上一個M指令的12,12坐標開始,1,0表示在X軸方向上向右偏移1一個單位,Y軸不變,這個時候我們就有了兩個固定坐標(12,12)和(13,12),然后a指令開始繪圖,它將繪制一個圓,圓的邊緣將連接這兩個坐標。
這時候細心一點來看的話,就應該可以發現了(12,12)到(13,12)之間其實是一條直線,也就是說,a指令繪制出來的其實并不是一個圓,而是一道弧,并且將這條弧的兩端以直線連接了。 說到這里就可以來看看a指令中的 “M12,12 a3.2,3.2 0,1 0,1 0 ” 幾個紅顏色的參數了 第一個:官方介紹是 X軸的旋轉角度,其實非常好理解,就是以圓心為原點,旋轉多少度。。。你想轉多少度,就設置多大參數。 第二個:它有兩個參數可選0或者1。就我們剛剛樓上的例子而言,設置為1時,我們看到的是白色的大圓弧,而設置為0時,我們看到是黑色的小圓弧。(這樣看的話,就非常清楚了。。。兩個點連接的直線分割了整個圓)
第三個參數:是解決順逆時針的,0表示逆時針,1表示順時針。為什么有這個參數呢?因為有時候,我們需要一個半圓,也就是(12,12)和(13,12)連成的線剛好處于圓的中間,這個時候問題就出現了,你到底是要左邊的圓呢,還是右邊的呢?如果你選0就是左邊的半圓,反之就是右邊的半圓。
C和Q兩個指令是貝塞爾曲線。。。分別有三個和兩個參數,其實這個貝塞爾曲線我不知道怎么描述。但如果有使用過CDR繪制矢量圖的人應該知道,或者。。。小伙伴們自己試一試摸索一下唄?(原諒我書讀的少,真的是只會用,不知道怎么描述,就不在這誤人子弟了)
新聞熱點
疑難解答