2015-12-19 45 views
0

我看到類似的問題here,here,here以及其他一些網站。如何在Android中使用xml繪製複雜圖表

我知道畫使用XML形狀,如下面的代碼

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > 
    <gradient android:startColor="#FFFF0000" android:endColor="#80FF00FF" 
     android:angle="270"/> 
</shape> 

但是,我看到了一個代碼,而看到this教程,他們已經習慣XML繪製飛行

我以爲這是一個PNG文件,但後來我看到它是一個XML。下面是代碼

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
     android:width="24dp" 
     android:height="24dp" 
     android:viewportWidth="24.0" 
     android:viewportHeight="24.0"> 
    <path 
     android:fillColor="#FF000000" 
     android:pathData="M10.18,9"/> 
    <path 
     android:fillColor="#FF000000" 
     android:pathData="M21,16v-2l-8,-5V3.5c0,-0.83 -0.67,-1.5 -1.5,-1.5S10,2.67 10,3.5V9l-8,5v2l8,-2.5V19l-2,1.5V22l3.5,-1 3.5,1v-1.5L13,19v-5.5l8,2.5z"/> 
</vector> 

我只是想知道這是什麼pathData及其內容M21,16v-2l-8,-5V3.5c0...手段。

你能解釋一下嗎?

而且我的下一個疑問是,我怎麼可以編寫這樣的

我們需要給它一些計算手工編碼(通過指定每個像素位置)

是否有任何技巧通過使用png圖像來繪製形狀。 (任何在線 轉換器,我們上傳一個png文件,它會給我們的XML代碼 或任何其他方法)

是問題的標題是正確的?我不知道那是什麼方法。所以我簡單地把如何畫...。如果我指定了任何錯誤,請糾正我。

在此先感謝(:

回答

3

您正在查看的XML文件是一個VectorDrawable。這是一個矢量圖形文件格式的Android版本,並且相當s類似於流行的SVG文件格式。

目前有兩種主要方法可以創建VectorDrawable。如果你瞭解它們是如何工作的,你可以手工編寫它,但最常用的方法是轉換一個SVG文件(現有的文件或自己繪製一個新文件)。

製作的SVG

如果你想有大量的可用範圍從昂貴的免費工具來繪製SVG。例子:

轉換成VectorDrawable

您可以使用在線轉換器svg2android,但Android Studio現在有一個內置的轉換器。您可以通過右鍵單擊drawables文件夾並選擇新建>矢量資源來訪問它,它可以讓您從Google設計圖標或自己的SVG文件中進行選擇。

enter image description here

pathData

一個VectorDrawable的pathData是基於SVG格式。有關完整的說明,您可以登錄look at the SVG documentation here。在你的例子M21,16v-2l-8,-5V3.5c0...它意味着: 移動到點21,16(M21,16) 繪製長度爲2的垂直線向上(V-2) 畫一條直的對角線向上5位和8左(1-8,-5) 等等。每個字母都會啓動一種新的命令。

從png格式

我從來沒有嘗試過的PNG轉換爲矢量,所以我不能說有多好作品轉換。如果你想嘗試它,谷歌「將png轉換爲svg」,一旦你有了你的svg,你將再次轉換爲Androids VectorDrawable格式,如上所述。