如何在Android中使用xml绘制复杂的图表

时间:2015-12-19 10:03:30

标签: android xml android-vectordrawable

我看到了类似的问题hereherehere以及其他一些网站。

我知道使用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代码   或任何其他方法)

问题的标题是否正确?我不知道那是什么方法。所以我只想把如何绘制...... 。如果我说错了,请纠正我。

提前致谢(:

2 个答案:

答案 0 :(得分:3)

您正在查看的XML文件是VectorDrawable。这是矢量图形文件格式的Androids版本,与流行的SVG文件格式非常相似。

目前有两种主要方法可以创建VectorDrawable。如果您了解它们的工作原理,您可以手动编写代码,但最常见的方法是转换SVG文件(现有文件或自己绘制新文件)。

制作SVG

如果您想绘制SVG,可以使用大量工具,从昂贵到免费。例子:

转换为VectorDrawable

您可以使用在线转换器svg2android,但Android Studio现在有内置转换器。您可以通过右键单击drawables文件夹并选择新的&gt;来访问它。 Vector Asset,它允许您从Googles Material Design图标或您自己的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格式,如上所述。

答案 1 :(得分:1)

这是android文档,其中包含有关您的问题的详细信息以及与此相关的一些额外内容。

https://developer.android.com/tools/help/vector-asset-studio.html

但有一点需要记住,目前{1}}支持API等级21或更高。