代码之家  ›  专栏  ›  技术社区  ›  Slapout

循环浏览android视图的所有子视图?

  •  28
  • Slapout  · 技术社区  · 15 年前

    我正在为Android开发一款游戏。为了帮助实现它,我的想法是创建一个视图的子类。然后我将插入这个类的几个实例作为主视图的子视图。每个实例都将处理按下时的检测(通过OntouchListener)。

    我现在遇到的问题是如何循环遍历所有这些子视图,以便读取它们的状态并对其进行处理?(即当它们都达到某一状态时,就会发生某些事情)。

    或者有没有更好的方法让屏幕上有几个对象对触摸做出响应,我可以检查哪些对象的状态?

    3 回复  |  直到 7 年前
        1
  •  20
  •   Cool    8 年前

    @jqpubliq是对的,但是如果您真的想浏览所有视图,您可以简单地使用 getChildCount() getChildAt() 方法从 ViewGroup . 剩下的就是一个简单的递归方法。

        2
  •  52
  •   Tobrun    7 年前

    我举了一个递归函数的小例子:

    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
                    }
                }
            }
        }
    

    该函数将开始循环查看组内的所有视图元素(从最后一个项到第一个项),如果子项是视图组,则使用该子项重新启动该函数以检索该子项内的所有嵌套视图。

        3
  •  1
  •   jqpubliq    15 年前

    使用 Views 听起来,如果有运动的话,很难把任何东西渲染好。你可能想画一幅 Canvas 或使用 OpenGL 除非你做的是静态的。这里有一个 great talk 从去年关于安卓游戏的I/O会议开始。有点长,你可以跳过15分钟。也可以使用源代码。这应该能给你一个好主意