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

如何在Android中使用xml绘制复杂图表,android,xml,android-vectordrawable,Android,Xml,Android Vectordrawable,我在其他一些网站上也看到了类似的问题 我知道使用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="#80FF

我在其他一些网站上也看到了类似的问题

我知道使用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>


但是,我在看教程时看到了一段代码,他们使用了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及其内容是什么意思

你能解释一下吗?

我的下一个疑问是,我怎么能这样编码

我们是否需要手动编码(通过指定每个像素位置) 经过一些计算

有没有什么技巧可以通过png图像来绘制形状。(网上有吗 转换器,我们上传一个png文件,它会给我们XML代码 或任何其他方法)

问题的标题正确吗?我不知道那是什么方法。所以我简单地把如何画…。如果我指定了任何错误,请纠正我


提前感谢(:

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


但有一件事要记住,目前API级别21或更高版本支持
vector

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


但有一点要记住,当前API级别21或更高版本支持
vector

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

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

制作SVG

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

转换为矢量可绘制的

您可以使用在线转换器,但Android Studio现在有一个内置转换器。您可以通过右键单击drawables文件夹并选择new>Vector Asset来访问此转换器,您可以从Google材质设计图标或您自己的SVG文件中进行选择

pathData

VectorDrawable的pathData基于SVG格式。要获得完整的解释,您可以。在您的示例中,
M21,16v-2l-8,-5V3.5c0…
表示: 移动到第21,16点(M21,16) 向上画一条长度为2(v-2)的垂直线 在5处和左侧8处画一条直线对角线(l-8,-5) 以此类推。每个字母开始一种新的命令类型

从png转换


我从来没有试过将png转换成矢量,所以我说不出它有多好。如果你想试试,谷歌“将png转换成svg”一旦有了svg,您将再次转换为上述Androids VectorDrawable格式。

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

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

制作SVG

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

转换为矢量可绘制的

您可以使用在线转换器,但Android Studio现在有一个内置转换器。您可以通过右键单击drawables文件夹并选择new>Vector Asset来访问此转换器,您可以从Google材质设计图标或您自己的SVG文件中进行选择

pathData

VectorDrawable的pathData基于SVG格式。要获得完整的解释,您可以。在您的示例中,
M21,16v-2l-8,-5V3.5c0…
表示: 移动到第21,16点(M21,16) 向上画一条长度为2(v-2)的垂直线 在5处和左侧8处画一条直线对角线(l-8,-5) 以此类推。每个字母开始一种新的命令类型

从png转换

我从来没有尝试过将png转换为矢量,所以我不能说它工作得有多好。如果你想试试,谷歌“将png转换为svg”,一旦你有了svg,你就会再次转换为上述Androids VectorDrawable格式