如何在android中绘制按钮之间的连接线

如何在android中绘制按钮之间的连接线,android,button,drawing,lines,Android,Button,Drawing,Lines,我刚开始用android编程,我想画一条线来连接我点击的按钮。我有一个gridLayout,在主XML文件中定义了许多按钮。我希望有一条从第一个点击按钮的中心到我按下的下一个按钮的直线,依此类推(有时在我点击的第一个按钮处结束,所以它会形成一些形状)。我对画布、动画做了很多研究,但不知道从哪里开始。任何帮助都将不胜感激-谢谢 RG 顺便说一句,我最终想给连接线制作动画,但首先要做的是 绘制图形的最佳方法是覆盖GridLayout的draw-方法。值得注意的不是onDraw方法,因为该方法在绘制子

我刚开始用android编程,我想画一条线来连接我点击的按钮。我有一个gridLayout,在主XML文件中定义了许多按钮。我希望有一条从第一个点击按钮的中心到我按下的下一个按钮的直线,依此类推(有时在我点击的第一个按钮处结束,所以它会形成一些形状)。我对画布、动画做了很多研究,但不知道从哪里开始。任何帮助都将不胜感激-谢谢

RG


顺便说一句,我最终想给连接线制作动画,但首先要做的是

绘制图形的最佳方法是覆盖
GridLayout
draw
-方法。值得注意的不是
onDraw
方法,因为该方法在绘制子视图之前被调用,因此会将线条置于背景中。记得在绘制之前调用super方法

在第一次布局过程后(即在至少调用一次
onLayout
之后),按钮的位置应初始化。您可以通过对它们调用
getLeft
getTop
等来获取它们相对于父对象的相对位置。你可以用它来计算他们的中心坐标


你必须告诉你的
GridLayout
在哪个按钮上画线。最简单的方法可能是给每个按钮一个
OnClickListener
,并告诉它们的父项(
getParent
),它被单击了,因此应该开始相应地绘制线,例如通过使用单击按钮的坐标构建一组线对象。要在每次单击后强制重画
GridLayout
,您可以在其上调用
invalidate

他特别写道,您不应该覆盖onDraw方法,而应该覆盖draw方法(尽管我不确定为什么,因为在绘制内容时,视图应该已经知道其大小及其子视图的大小):每当GridLayout发生任何需要重新绘制的更改时(主要是在调用invalidate之后),都会重复调用draw方法。OnClickListener只是在GridLayout中“注册”一个按钮,而draw方法只是在每次调用它时绘制所有先前注册的按钮的所有行。第一次调用draw时,如果没有要绘制的线,则无所谓。单击按钮后只需调用invalidate,就会再次调用draw。每个视图组中有3种绘图方法,“draw”、“onDraw”和“dispatchDraw”。“dispatchDraw”负责绘制子视图,并在调用“onDraw”后调用。这两个函数都是在ViewGroup类的“draw”方法中调用的。因此,如果您在“onDraw”中绘制线,它们将被稍后调用的“dispatchDraw”透支。理解这一点的最佳方法是查看ViewGroup的源代码。可能是我把它弄混了,但我想这就是它的工作原理。试一试。一个非常有用的回答,再次感谢。最后一个问题:所有这些都可以在activity类中完成,而不需要在扩展View的单独类中完成,对吗?不,您必须为此对GridLayout进行子类化。您可以使用完全限定的类名(即)将类包含在布局文件中。您是否解决了该问题?