Android Studio神器之Vector Asset

從Android 8.0(API 26)之后慷蠕,Android開始引入矢量圖榜苫,矢量圖的常用格式是svg劫狠。在Android 8.0之前只使用位圖(格式是png)作為Android的圖片素材栅干,但是因為Android設備分辨率的多樣性新锈,導致位圖素材需要適配碍讨,矢量圖的引用可以使Android 8.0(包括Android 8.0)之后的版本不再需要適配治力,因為矢量圖不會失真,所以可以達到自適應的效果勃黍。

(1)位圖和矢量圖的概念

位圖又叫點陣圖或像素圖宵统,計算機屏幕上的圖是由屏幕上的發(fā)光點(即像素)構成的,每個點用二進制數據來描述其顏色與亮度等信息覆获,這些點是離散的马澈,類似于點陣。多個像素的色彩組合就形成了圖像弄息,稱之為位圖痊班。

矢量圖又叫向量圖,是用一系列計算機指令來描述和記錄一幅圖疑枯,一幅圖可以解為一系列由點辩块、線、面等到組成的子圖,它所記錄的是對象的幾何形狀废亭、線條粗細和色彩等国章。生成的矢量圖文件存儲量很小,特別適用于文字設計豆村、圖案設計液兽、版式設計、標志設計掌动、計算機輔助設計(CAD)四啰、工藝美術設計、插圖等粗恢。

位圖圖像與矢量圖像相比更容易模仿照片似的真實效果柑晒。位圖圖像的主要優(yōu)點在于表現(xiàn)力強、細膩眷射、層次多匙赞、細節(jié)多,可以十分容易的模擬出像照片一樣的真實效果妖碉。由于是對圖像中的像素進行編輯涌庭,所以在對圖像進行拉伸、放大或縮小等到處理時欧宜,其清晰度和光滑度會受到影響坐榆。位圖圖像可以通過數字相機、掃描或PhotoCD獲得冗茸,也可以通過其他設計軟件生成位圖圖像席镀,也稱點陣圖像或繪制圖像,是由稱作像素的單個點組成的夏漱。當放大位圖時愉昆,可以看見構成圖像的單個圖片元素。擴大位圖尺寸就是增大單個像素麻蹋,會使線條和形狀顯得參差不齊。但是如果從稍遠一點的位置觀看焊切,位圖圖像的顏色和形狀又是連續(xù)的扮授,這就是位圖的特點。矢量圖像专肪,也稱繪圖圖像刹勃,在數學上定義為一系列點與點之間的關系,矢量圖可以任意放大或縮小而不會出現(xiàn)圖像失真現(xiàn)象 嚎尤。

(2)阿里圖庫的使用

阿里圖庫的官網如下:

https://www.iconfont.cn/

我在阿里圖庫中隨意找了一張素材荔仁,如下:

圖片.png

點擊“SVG下載”一張矢量圖備用。點擊復制SVG獲取矢量圖數據如下:

<svg t="1570928688533" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3192" width="200" height="200">
    <path d="M737.3 63.8H286.7C174.4 63.8 83 155.2 83 267.6v488.8c0 112.4 91.4 203.8 203.8 203.8h450.5c112.4 0 203.8-91.4 203.8-203.8V267.6C941 155.2 849.6 63.8 737.3 63.8zM887 756.4c0 82.6-67.2 149.7-149.7 149.7H286.7C204.2 906.2 137 839 137 756.4V267.6c0-82.6 67.2-149.7 149.7-149.7h450.5c82.6 0 149.7 67.2 149.7 149.7v488.8z" fill="#d4237a" p-id="3193"></path>
    <path d="M685.1 441v-38.8c0-34.4-28-62.4-62.4-62.4H584L556.1 312c-11.8-11.8-27.4-18.2-44.1-18.2-16.7 0-32.4 6.5-44.1 18.2L440 339.8h-37.8c-34.4 0-62.4 28-62.4 62.4V440L312 467.9c-24.3 24.3-24.3 63.9 0 88.2l27.9 27.9v38.8c0 34.4 28 62.4 62.4 62.4H441l26.9 26.9c12.2 12.2 28.1 18.2 44.1 18.2s31.9-6.1 44.1-18.2l26.9-26.9h39.7c34.4 0 62.4-28 62.4-62.4V583l26.9-26.9c24.3-24.3 24.3-63.9 0-88.2L685.1 441z m-6.5 81.7l-33.8 33.8c-4.4 4.4-6.9 10.4-6.9 16.7v49.5c0 8.2-6.9 15.1-15.1 15.1h-49.5c-6.3 0-12.3 2.5-16.7 6.9l-33.8 33.8c-5.8 5.8-15.6 5.8-21.4 0l-33.8-33.8c-4.4-4.4-10.4-6.9-16.7-6.9h-48.5c-8.2 0-15.1-6.9-15.1-15.1v-48.5c0-6.3-2.5-12.3-6.9-16.7l-34.8-34.8c-5.8-5.8-5.8-15.6 0-21.3l34.8-34.8c4.4-4.4 6.9-10.4 6.9-16.7v-47.6c0-8.2 6.9-15.1 15.1-15.1H450c6.3 0 12.3-2.5 16.7-6.9l34.8-34.8c5.6-5.6 15.7-5.6 21.3 0l34.8 34.8c4.4 4.4 10.4 6.9 16.7 6.9h48.5c8.2 0 15.1 6.9 15.1 15.1v48.5c0 6.3 2.5 12.3 6.9 16.7l33.8 33.8c5.8 5.8 5.8 15.6 0 21.4z" fill="#d4237a" p-id="3194"></path>
    <path d="M512.5 420.6c-50.4 0-91.4 41-91.4 91.4s41 91.4 91.4 91.4 91.4-41 91.4-91.4-41-91.4-91.4-91.4z m0 135.6c-24.4 0-44.2-19.8-44.2-44.2 0-24.4 19.8-44.2 44.2-44.2 24.4 0 44.2 19.8 44.2 44.2 0 24.4-19.9 44.2-44.2 44.2z" fill="#d4237a" p-id="3195"></path>
</svg>
(3)Vector Asset的使用

首先,鼠標選中app模塊乏梁,或者app的子文件(夾)次洼,F(xiàn)ile-->New-->Vector Asset,進入Vector Asset界面遇骑,界面如下:

圖片.png

矢量圖的制作有兩種素材類型:Clip Art(剪切圖)卖毁,Local file(本地SVG文件或者PSD文件)

【Clip Art(剪切圖)】

Name:xml文件名稱
Clip Art:可以選擇AS自帶的圖標

圖片.png

Size:設置矢量圖的大小
Color:設置矢量圖的顏色
Opacity:設置不透明度
Enable auto mirroring for RTL layout:為RTL布局啟用自動鏡像

【Local file(本地SVG文件或者PSD文件)】

Name:xml文件名稱
Size:設置矢量圖的大小
Opacity:設置不透明度
Enable auto mirroring for RTL layout:為RTL布局啟用自動鏡像
Path:選擇本地矢量圖(比如svg圖片)
從本地導入上面預留好的svg文件,如下:

圖片.png

導入android之后會生成ic_setting.xml文件落萎,這個文件里面的代碼也是自動生成的亥啦,代碼如下:

<vector android:height="24dp" android:viewportHeight="1024"
    android:viewportWidth="1024" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="#d4237a" android:pathData="M737.3,63.8H286.7C174.4,63.8 83,155.2 83,267.6v488.8c0,112.4 91.4,203.8 203.8,203.8h450.5c112.4,0 203.8,-91.4 203.8,-203.8V267.6C941,155.2 849.6,63.8 737.3,63.8zM887,756.4c0,82.6 -67.2,149.7 -149.7,149.7H286.7C204.2,906.2 137,839 137,756.4V267.6c0,-82.6 67.2,-149.7 149.7,-149.7h450.5c82.6,0 149.7,67.2 149.7,149.7v488.8z"/>
    <path android:fillColor="#d4237a" android:pathData="M685.1,441v-38.8c0,-34.4 -28,-62.4 -62.4,-62.4L584,339.8L556.1,312c-11.8,-11.8 -27.4,-18.2 -44.1,-18.2 -16.7,0 -32.4,6.5 -44.1,18.2L440,339.8h-37.8c-34.4,0 -62.4,28 -62.4,62.4L339.8,440L312,467.9c-24.3,24.3 -24.3,63.9 0,88.2l27.9,27.9v38.8c0,34.4 28,62.4 62.4,62.4L441,685.2l26.9,26.9c12.2,12.2 28.1,18.2 44.1,18.2s31.9,-6.1 44.1,-18.2l26.9,-26.9h39.7c34.4,0 62.4,-28 62.4,-62.4L685.1,583l26.9,-26.9c24.3,-24.3 24.3,-63.9 0,-88.2L685.1,441zM678.6,522.7l-33.8,33.8c-4.4,4.4 -6.9,10.4 -6.9,16.7v49.5c0,8.2 -6.9,15.1 -15.1,15.1h-49.5c-6.3,0 -12.3,2.5 -16.7,6.9l-33.8,33.8c-5.8,5.8 -15.6,5.8 -21.4,0l-33.8,-33.8c-4.4,-4.4 -10.4,-6.9 -16.7,-6.9h-48.5c-8.2,0 -15.1,-6.9 -15.1,-15.1v-48.5c0,-6.3 -2.5,-12.3 -6.9,-16.7l-34.8,-34.8c-5.8,-5.8 -5.8,-15.6 0,-21.3l34.8,-34.8c4.4,-4.4 6.9,-10.4 6.9,-16.7v-47.6c0,-8.2 6.9,-15.1 15.1,-15.1L450,387.2c6.3,0 12.3,-2.5 16.7,-6.9l34.8,-34.8c5.6,-5.6 15.7,-5.6 21.3,0l34.8,34.8c4.4,4.4 10.4,6.9 16.7,6.9h48.5c8.2,0 15.1,6.9 15.1,15.1v48.5c0,6.3 2.5,12.3 6.9,16.7l33.8,33.8c5.8,5.8 5.8,15.6 0,21.4z"/>
    <path android:fillColor="#d4237a" android:pathData="M512.5,420.6c-50.4,0 -91.4,41 -91.4,91.4s41,91.4 91.4,91.4 91.4,-41 91.4,-91.4 -41,-91.4 -91.4,-91.4zM512.5,556.2c-24.4,0 -44.2,-19.8 -44.2,-44.2 0,-24.4 19.8,-44.2 44.2,-44.2 24.4,0 44.2,19.8 44.2,44.2 0,24.4 -19.9,44.2 -44.2,44.2z"/>
</vector>

以上代碼就是矢量圖在Android中的表示了。

(4)了解SVG

SVG 即可縮放矢量圖形 (Scalable Vector Graphics) 练链,是使用 XML 來描述二維圖形和繪圖程序的語言翔脱,其定義遵循 W3C 標準。

在 2003 年 1 月媒鼓,SVG 1.1 被確立為 W3C 標準届吁。使用 SVG 的優(yōu)勢在于:

SVG 可被非常多的工具讀取和修改(比如記事本)
SVG 與 JPEG 和 GIF 圖像比起來,尺寸更小隶糕,且可壓縮性更強
SVG 是可伸縮的
SVG 圖像可在任何的分辨率下被高質量地打印
SVG 可在圖像質量不下降的情況下被放大
SVG 圖像中的文本是可選的瓷产,同時也是可搜索的(很適合制作地圖)
SVG 可以與 Java 技術一起運行
SVG 是開放的標準
SVG 文件是純粹的 XML

SVG 的 <path> 元素用于定義一些復雜的圖形,其定義在 W3 SVG Path枚驻。

<path> 可用的命令如下:

名稱 解釋
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,large-arc-flag,sweep-flag,X,Y) 弧線
Z = closepath() 關閉路徑

以上所有命令均允許小寫字母再登。大寫的字母是基于原點的坐標系(偏移量)尔邓,即絕對位置;小寫字母是基于當前點坐標系(偏移量)锉矢,即相對位置梯嗽。

在Android 中,矢量圖的繪制由pathData完成沽损。

[本章完...]

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末灯节,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子绵估,更是在濱河造成了極大的恐慌炎疆,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件国裳,死亡現(xiàn)場離奇詭異形入,居然都是意外死亡,警方通過查閱死者的電腦和手機缝左,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門亿遂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浓若,“玉大人,你說我怎么就攤上這事蛇数∨驳觯” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵苞慢,是天一觀的道長诵原。 經常有香客問我,道長挽放,這世上最難降的妖魔是什么绍赛? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮辑畦,結果婚禮上吗蚌,老公的妹妹穿的比我還像新娘。我一直安慰自己纯出,他們只是感情好蚯妇,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著暂筝,像睡著了一般箩言。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上焕襟,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天陨收,我揣著相機與錄音,去河邊找鬼鸵赖。 笑死务漩,一個胖子當著我的面吹牛,可吹牛的內容都是我干的它褪。 我是一名探鬼主播饵骨,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼茫打,長吁一口氣:“原來是場噩夢啊……” “哼老赤!你這毒婦竟也來了诗越?” 一聲冷哼從身側響起嚷狞,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎床未,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體斋扰,經...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡传货,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巍杈。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡扛伍,死狀恐怖筷畦,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤漂问,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布吧兔,位于F島的核電站境蔼,受9級特大地震影響逢享,放射性物質發(fā)生泄漏弓柱。R本人自食惡果不足惜侧但,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绢彤。 院中可真熱鬧械巡,春花似錦、人聲如沸疹启。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喊崖。三九已至挣磨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間荤懂,已是汗流浹背茁裙。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留节仿,地道東北人晤锥。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像廊宪,于是被迫代替她去往敵國和親矾瘾。 傳聞我的和親對象是個殘疾皇子眉踱,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容