我正在为Android设计游戏。为了帮助实现它,我的想法是创建一个视图的子类。然后我会插入这个类的几个实例作为主视图的子节点。每个实例都会处理检测它何时被按下(通过OnTouchListener)。遍历Android视图的所有子视图?
我现在面临的问题是如何循环所有这些子视图,以便我可以读取它们的状态并处理它们? (即,当他们都达到某种状态应该发生)。
或者有更好的方法让屏幕上有多个响应触摸的对象,并且我可以检查其状态吗?
我正在为Android设计游戏。为了帮助实现它,我的想法是创建一个视图的子类。然后我会插入这个类的几个实例作为主视图的子节点。每个实例都会处理检测它何时被按下(通过OnTouchListener)。遍历Android视图的所有子视图?
我现在面临的问题是如何循环所有这些子视图,以便我可以读取它们的状态并处理它们? (即,当他们都达到某种状态应该发生)。
或者有更好的方法让屏幕上有多个响应触摸的对象,并且我可以检查其状态吗?
@jqpubliq是对一个好主意,但如果你真的想通过所有的观点,你可以简单地使用getChildCount()
和getChildAt()
方法从ViewGroup
。一个简单的递归方法将完成剩下的工作。
使用Views
听起来好像它会很残酷地很难渲染任何东西,如果有移动。您可能想要绘制到Canvas
或使用OpenGL
,除非您正在做一些非常静态的事情。以下是去年制作Android游戏的I/O会议的great talk。它的种类很长,你可以跳过大约15分钟。另外源也可用。这应该给你的方式去了解事情
我已经做了递归函数的一个小例子:
public void recursiveLoopChildren(ViewGroup parent) {
for (int i = 0; i < parent.getChildCount(); i++) {
final View child = parent.getChildAt(i);
if (child instanceof ViewGroup) {
recursiveLoopChildren((ViewGroup) child);
// DO SOMETHING WITH VIEWGROUP, AFTER CHILDREN HAS BEEN LOOPED
} else {
if (child != null) {
// DO SOMETHING WITH VIEW
}
}
}
}
功能将开始遍历人视图元素的ViewGroup内(从去年到第一项),如果孩子是一个ViewGroup然后重新启动该子项的功能可以检索该子项中的所有嵌套视图。
不起作用。当视图包含webView时 – Karacago 2015-10-06 11:52:57
您选择了'for(int i = parent.getChildCount() - 1; i> = 0; i - )'而不是'for(int i = 0; i
@PeterProkop我个人更喜欢这个循环。即使在循环过程中删除循环的一个元素,它也可以很好地工作。 – 2017-11-07 04:47:25
为什么不只是使用数组或矢量来保持这些视图的轨迹?这将是我认为最简单和最有效的方式。
是的,我需要做一个不同的方式,但我会先尝试这个。这是一个休闲游戏。 – Slapout 2010-04-14 02:29:35