我看到了类似的问题here,here,here以及其他一些网站。
我知道使用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代码 或任何其他方法)
问题的标题是否正确?我不知道那是什么方法。所以我只想把如何绘制...... 。如果我说错了,请纠正我。
提前致谢(:
答案 0 :(得分:3)
您正在查看的XML文件是VectorDrawable。这是矢量图形文件格式的Androids版本,与流行的SVG文件格式非常相似。
目前有两种主要方法可以创建VectorDrawable。如果您了解它们的工作原理,您可以手动编写代码,但最常见的方法是转换SVG文件(现有文件或自己绘制新文件)。
制作SVG
如果您想绘制SVG,可以使用大量工具,从昂贵到免费。例子:
转换为VectorDrawable
您可以使用在线转换器svg2android,但Android Studio现在有内置转换器。您可以通过右键单击drawables文件夹并选择新的&gt;来访问它。 Vector Asset,它允许您从Googles Material Design图标或您自己的SVG文件中进行选择。
<强> 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或更高。