2010-04-08 11 views
24

저는 Android 용 게임을 만들고 있습니다. 그것을 구현하는 데 도움이 내 생각은 뷰의 하위 클래스를 만드는 것입니다. 그런 다음이 클래스의 여러 인스턴스를 기본보기의 자식으로 삽입합니다. 각 인스턴스는 눌려 졌을 때 (OnTouchListener를 통해) 감지를 처리합니다.Android보기의 모든 하위보기를 반복합니다.

지금 문제는 어떻게 이러한 모든 하위 뷰를 반복하여 상태를 읽고 처리 할 수 ​​있는가입니다. (즉, 그들이 모두 어떤 상태에 이르면 어떤 일이 일어나야합니다.)

터치에 반응하고 상태를 확인할 수있는 여러 개체를 화면에 표시하는 더 좋은 방법이 있습니까?

답변

17

@jqpubliq 잘가요 것들에 대해 이동하는 방법의 좋은 아이디어를 줄 것이다하지만 당신은 정말 모든 조회수를 통과 할 경우 당신은 단순히 ViewGroup에서 getChildCount()getChildAt() 방법을 사용할 수 있습니다. 간단한 재귀 적 방법으로 나머지를 처리 ​​할 것입니다. 아이가 뷰 그룹 인 경우

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

(제 1 항목에 마지막으로부터)는 뷰 그룹 내부 알 뷰 요소를 통해 반복 시작할 함수 후 다시 시작

1

움직임이있는 경우 무언가를 잘 렌더링하는 것이 잔인하게 어려워지는 것처럼 들리는 Views 소리를 사용하십시오. 정말로 정적 인 것을하지 않는 한 Canvas으로 그리거나 OpenGL을 사용하고 싶을 것입니다. 작년 I/O 컨퍼런스에서 안드로이드 게임을 제작 한 great talk입니다. 길이가 길고 약 15 분을 건너 뛸 수 있습니다. 또한 소스를 사용할 수 있습니다. 그것은 당신에게

+0

그래, 다른 방법으로해야 할 필요가 있지만 먼저 시도해 보겠습니다. 그것은 캐주얼 게임입니다. – Slapout

41

I 재귀 함수의 작은 예를 만들었다 그 아이가 그 아이 안의 모든 중첩 된 뷰를 검색하는 함수.

+0

가 작동하지 않습니다. view에 webView가 포함되어있을 때 – Karacago

+2

for (int i = 0; i ) 대신'for (int i = parent.getChildCount() - 1; i> = 0;(); i ++)'? –

+0

@PeterProkop 개인적으로이 루프가 더 마음에 듭니다. 루프 중에 루프의 요소 중 하나를 제거해도 잘 작동합니다. –

0

배열이나 벡터를 사용하여 이러한 뷰의 트랙을 유지하지 않는 이유는 무엇입니까? 그것은 내가 생각하기에 가장 단순하고 효율적인 방법 일 것입니다.

관련 문제