2010-04-08 30 views
24

Tôi đang làm việc trên một trò chơi dành cho Android. Để giúp thực hiện nó, ý tưởng của tôi là tạo một lớp con của một khung nhìn. Sau đó tôi sẽ chèn một số trường hợp của lớp này là con của khung nhìn chính. Mỗi trường hợp sẽ xử lý phát hiện khi nó được nhấn (thông qua OnTouchListener).Lặp qua tất cả các bản xem trước của chế độ xem Android?

Vấn đề tôi đang gặp phải là làm cách nào để lặp qua tất cả các chế độ xem phụ này để tôi có thể đọc trạng thái của chúng và xử lý chúng? (Tức là khi tất cả chúng đều đạt tới trạng thái nhất định thì điều gì đó sẽ xảy ra).

Hoặc có cách nào tốt hơn để có một số đối tượng trên màn hình phản ứng với cảm ứng và trạng thái có thể kiểm tra của tôi không?

Trả lời

17

@jqpubliq là đúng, nhưng nếu bạn thực sự muốn đi qua tất cả xem bạn chỉ có thể sử dụng các phương pháp getChildCount()getChildAt() từ ViewGroup. Một phương pháp đệ quy đơn giản sẽ làm phần còn lại.

1

Sử dụng Views có vẻ như sẽ rất khó để hiển thị mọi thứ tốt nếu có chuyển động. Bạn có thể muốn vẽ lên một số Canvas hoặc sử dụng OpenGL trừ khi bạn đang làm gì đó thực sự tĩnh. Đây là số great talk từ hội nghị I/O năm ngoái về việc tạo trò chơi trên Android. Loại dài của nó và bạn có thể bỏ qua khoảng 15 phút. Ngoài ra nguồn có sẵn. Điều đó sẽ cung cấp cho bạn một ý tưởng tốt về cách để đi về những điều

+0

Vâng, tôi đã thực hiện cần phải làm điều đó theo một cách khác, nhưng tôi sẽ thử điều này trước tiên. Đó là một trò chơi bình thường. – Slapout

41

Tôi đã thực hiện một ví dụ nhỏ của một hàm đệ quy:

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

Chức năng sẽ bắt đầu vòng lặp qua các yếu tố xem al bên trong một ViewGroup (từ cuối đến mục đầu tiên), nếu một đứa trẻ là một ViewGroup sau đó khởi động lại các chức năng với đứa trẻ đó để lấy tất cả các khung nhìn lồng nhau bên trong đứa trẻ đó.

+0

không hoạt động. khi chế độ xem có chứa webView – Karacago

+2

Bất kỳ lý do cụ thể nào bạn đã chọn 'cho (int i = parent.getChildCount() - 1; i> = 0; i -)' thay vì 'cho (int i = 0; i

+0

@PeterProkop Cá nhân tôi thích vòng lặp này hơn. Nó hoạt động tốt ngay cả khi bạn loại bỏ một phần tử của vòng lặp, trong vòng lặp. –

0

Tại sao không chỉ sử dụng mảng hoặc vectơ để theo dõi các chế độ xem này? Đó sẽ là cách đơn giản và hiệu quả nhất mà tôi nghĩ.

Các vấn đề liên quan