2010-04-08 5 views
24

Я работаю над игрой для Android. Чтобы помочь реализовать его, моя идея - создать подкласс представления. Затем я вставлял несколько экземпляров этого класса в качестве детей основного вида. Каждый экземпляр обрабатывал бы обнаружение при нажатии (через OnTouchListener).Проникнуть через все подпункты Android-вида?

Проблема, с которой я столкнулась сейчас, - как мне пройти все эти подзадачи, чтобы я мог читать их статусы и обрабатывать их? (I.e., когда все они достигают определенного состояния, должно произойти что-то).

Или есть лучший способ иметь несколько объектов на экране, которые реагируют на касание, и чей статус я могу проверить?

ответ

17

@jqpubliq является правильным, но если вы действительно хотите, чтобы пройти через все представления, которые можно просто использовать getChildCount() и getChildAt() методы из ViewGroup. Остальное будет выполнять простой рекурсивный метод.

1

Использование Views звучит так, будто его жестоко сложно отобразить что угодно, если есть движение. Вероятно, вы хотите рисовать до Canvas или использовать OpenGL, если вы не делаете что-то действительно статичное. Вот great talk из последних лет конференции ввода-вывода для создания игр для Android. Его вид длинный, и вы можете пропустить около 15 минут. Также доступен источник. Это должно дать вам хорошее представление о путях идти о вещах

+0

Да, мне нужно было сделать это по-другому, но я попытаюсь это сделать первым. Это случайная игра. – Slapout

41

Я сделал небольшой пример рекурсивной функции:

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 затем перезапустить функция с этим дочерним элементом для извлечения всех вложенных представлений внутри этого дочернего элемента.

+0

не работает. когда view содержит webView – Karacago

+2

Любая конкретная причина, по которой вы выбрали 'for (int i = parent.getChildCount() - 1; i> = 0; i -)' вместо 'for (int i = 0; i

+0

@PeterProkop Мне лично этот цикл больше нравится. Он работает хорошо, даже если вы удалите один из элементов цикла, во время цикла. –

0

Почему бы просто не использовать массив или вектор, чтобы отслеживать эти виды? Думаю, это был бы самый простой и эффективный способ.

Смежные вопросы