2010-04-08 10 views
24

Ich arbeite an einem Spiel für Android. Um es zu implementieren, ist meine Idee, eine Unterklasse einer Ansicht zu erstellen. Ich würde dann mehrere Instanzen dieser Klasse als Kinder der Hauptansicht einfügen. Jede Instanz würde erkennen, wann sie gedrückt wurde (via OnTouchListener).Schleife durch alle Teilansichten einer Android-Ansicht?

Das Problem, das ich jetzt habe, ist, wie ich alle diese Unteransichten durchlaufen, damit ich ihre Status lesen und verarbeiten kann? (Wenn sie alle einen bestimmten Zustand erreichen, sollte etwas passieren).

Oder gibt es eine bessere Möglichkeit, mehrere Objekte auf dem Bildschirm zu haben, die auf Berührung reagieren und deren Status ich überprüfen kann?

Antwort

17

@jqpubliq richtig ist, aber wenn Sie wirklich durch alle Ansichten gehen möchten, können Sie einfach verwenden, um die getChildCount() und getChildAt() Methoden aus ViewGroup. Eine einfache rekursive Methode erledigt den Rest.

1

Mit Views klingt wie es wird brutal schwierig sein, alles gut zu machen, wenn es Bewegung gibt. Sie möchten wahrscheinlich zu einer Canvas zeichnen oder OpenGL verwenden, es sei denn, Sie tun etwas wirklich statisch. Hier ist ein great talk von der letzten I/O-Konferenz über Android-Spiele. Es ist irgendwie lang und man kann ca. 15 Minuten hineinspringen. Auch die Quelle ist verfügbar. Das sollte Ihnen eine gute Idee von Möglichkeiten geben, gehen über die Dinge

+0

Ja, ich machte es nötig, es anders zu machen, aber ich werde das zuerst versuchen. Es ist ein Gelegenheitsspiel. – Slapout

41

Ich habe ein kleines Beispiel für eine rekursive Funktion gemacht:

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

Die Funktion wird Schleife über al View-Elemente innerhalb eines Viewgroup (vom letzten zum ersten Elemente) starten, wenn ein Kind ein Viewgroup dann neu starten die Funktion mit diesem Kind, um alle verschachtelten Ansichten in diesem Kind abzurufen.

+0

funktioniert nicht. Wenn view webView enthält – Karacago

+2

Irgendein bestimmter Grund, den Sie gewählt haben 'für (int i = parent.getChildCount() - 1; i> = 0; i -)' anstelle von 'für (int i = 0; i

+0

@PeterProkop Ich persönlich mag diese Schleife mehr. Es funktioniert gut, auch wenn Sie eines der Elemente der Schleife während der Schleife entfernen. –

0

Warum nicht einfach ein Array oder einen Vektor verwenden, um den Überblick über diese Ansichten zu behalten? Das wäre der einfachste und effizienteste Weg, den ich denke.

Verwandte Themen