如何创建android:pathData?

28

我需要在我的应用程序中使用路径数据,有没有一种方法可以将您已经拥有的图像转换为路径数据?

还是唯一的方法是使用Photoshop等软件自己计算所有像素?

2个回答

63

在Android中的矢量图形程序中,PathData是矢量图形程序的脚本之一。它并不是以可读性为首要目标的干净、易读的代码。以下是有关如何构建pathData的简要说明:

在脚本中:

M或m(X,Y)表示MoveTo:将光标移动到指定位置,大写的M是绝对坐标,小写的m是相对坐标;moveto命令后跟着X,Y坐标。

L或l(X,Y)表示LineTo:从当前位置画一条线到指定的X,Y位置。大写表示绝对坐标,小写表示相对坐标。

H或h(X)表示HorizontalLineTo:从当前光标位置画一条水平线到指定的X位置。如果有多个X坐标跟随该命令,则被视为折线。Y坐标保持不变。

V或v(Y)表示VerticalLineTo:从当前光标位置画一条垂直线到指定的Y位置。如果有多个Y坐标跟随该命令,则被视为折线。X坐标保持不变。

Z或z表示ClosePath:从光标的当前位置画一条线到路径的起始位置。不需要任何参数。

C或c表示Curve to:从当前点开始画一个三次贝塞尔曲线,到点(x,y),并使用(x1,y1)作为曲线起始处的控制点,(x2,y2)作为曲线终点处的控制点。C(大写)表示后面跟着绝对坐标;c(小写)表示后面跟着相对坐标。可以指定多组坐标以画出一条多重贝塞尔曲线。命令结束时,新的当前点变成多重贝塞尔曲线中所用的最终(x,y)坐标对。 如何使用C命令的图片

S (绝对值) s (相对值) 用于简写/平滑曲线: 从当前点绘制三次贝塞尔曲线到(x,y)。第一个控制点假定为相对于当前点在前一个命令上的第二个控制点的镜像。(如果没有前一个命令或前一个命令不是C、c、S或s,则假定第一个控制点与当前点重合。)(x2,y2)是第二个控制点(即曲线末端处的控制点)。S (大写)表示绝对坐标将跟随; s(小写)表示相对坐标将跟随。可以指定多组坐标以绘制polybézier。在命令结束时,新的当前点成为用于polybézier的最终(x,y)坐标对。

更多基本概念可参考此链接https://medium.com/ @ali muzaffar / understanding-vectordrawable-pathdata-commands-in-android-d56a6054610e#.g4gbz1r5p

这里也有一个很好的参考 link


2
非常有帮助和详细解释。谢谢! - Miha_x64
1
你提供的链接已经值得加1了。非常感谢! - SMBiggs

35

假设您正在引用VectorDrawable的pathData元素,如果您的图像是以.svg格式存在,那么您可以轻松地将其转换。

要在Android Studio中直接执行此操作,请右键单击可绘制文件夹,然后选择“New>Vector Asset”并导入本地SVG文件:

enter image description here

或使用其他转换器,例如svg2android (您可能会发现此方法适用于Android Studio无法转换的文件)。

如果您不想要VectorDrawable,只需要获取pathData,则可以在文本编辑器中打开SVG。 如果您拥有的图像尚未以矢量格式存在,则事情会更加困难。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接