2012-10-07 72 views
0

我需要知道離開,加入TableLayout右側,頂部,底部(LRTB)每個視點的視點 方案如下如何找到左,右,上,下查看

TableLayout有3個TableRows
每的TableRow具有3個ImageViews
像ImageViews的3×3矩陣

XXX XXX
XXX

我知道TableLayout和的TableRow有一個命名爲getChildAt(INT指數)方法 但如何使用該方法或任何其他方式找到每個視圖的LRTB意見

+0

請詳細說明..你想要達到什麼?也可以提供一些代碼,以便有人可以真正幫助... –

+0

如果您正在嘗試製作類似TIC TAC TOE的遊戲。然後,我可以幫助... –

回答

1

可以使用getChildAt()方法來確定是在你的任何行的哪個位置。這將涵蓋獲得左/右視圖。你可以嘗試使用TableLayout的getChildAt方法來查找行,但這可能比它的價值更麻煩。然而,讓它簡單一點,你可以只設立功能,用於每個ImageView的,如

getTopLeft(){ 
    myTableLayout.getChildAt(0).getChildAt(0); 
} 
getTopMiddle(){ 
    myTableLayout.getChildAt(0).getChildAt(1); 
} 
getTopRight(){ 
    myTableLayout.getChildAt(0).getChildAt(2); 
} 

但是,它可能更簡單,只是跟蹤哪些行以上/在當前行的下方使用適當的行命名(例如row_top,row_middle,row_bottom)並使用另一行的方法getChildAt()

但是,我應該注意,所有這些方法都要求您至少知道您正在查看的視圖的位置。除非您知道給定視圖的位置,否則沒有一種很好的方法可以知道哪個視圖位於給定視圖之上。但說實話,不是從行中添加/刪除ImageViews,而是可以考慮更改其drawable,這樣,您可以構建方法,該方法將視圖的ID和返回上方,下方等視圖。

2

我想你正在研究滴答tac腳趾有點應用程序。所以基本上你需要一個帶有3個TableRow的TableLayout。每行將有3個子視圖。所以如果你想獲得LRTB的意見,你可以調用這些方法 -

View getLeft(View view){ 
    TableRow row = (TableRow) view.getParent(); 
    int pos = 0; 
    for(int i = 0;i<3;i++){ 
     if(view == row.getChildAt(i)){ 
      pos = i; 
      break; 
     } 
    } 
    if(pos==0) 
     return null; 
    return row.getChildAt(pos-1); 
} 


View getRight(View view){ 
    TableRow row = (TableRow) view.getParent(); 
    int pos = 0; 
    for(int i = 0;i<3;i++){ 
     if(view == row.getChildAt(i)){ 
      pos = i; 
      break; 
     } 
    } 
    if(pos==2) 
     return null; 
    return row.getChildAt(pos+1); 
} 

View getTop(View view){ 
    TableRow row = (TableRow) view.getParent(); 
    int rowPos = 0; 
    for(int i = 0;i<3;i++){ 
     if(tableLayout.getChildAt(i)==row){ 
      rowPos=i; 
     } 
    } 
    int pos = 0; 
    for(int i = 0;i<3;i++){ 
     if(view == row.getChildAt(i)){ 
      pos = i; 
      break; 
     } 
    } 
    if(pos==0 || rowPos==0) 
     return null; 
    return tableLayout.getChildAt(rowPos-1).getChildAt(pos-1); 
} 

View getBottom(View view){ 
    TableRow row = (TableRow) view.getParent(); 
    int rowPos = 0; 
    for(int i = 0;i<3;i++){ 
     if(tableLayout.getChildAt(i)==row){ 
      rowPos=i; 
     } 
    } 
    int pos = 0; 
    for(int i = 0;i<3;i++){ 
     if(view == row.getChildAt(i)){ 
      pos = i; 
      break; 
     } 
    } 
    if(pos==2 || rowPos==2) 
     return null; 
    return tableLayout.getChildAt(rowPos+1).getChildAt(pos+1); 
} 
+0

但是,如果您只保留每個視圖的對象併爲其中的每個視圖設置屬性,則會更簡單。 – noob

+0

嘿謝謝多數民衆贊成在我正在尋找的確切算法 – prateeksarda

+0

如果它有幫助,那麼你也可以接受它作爲正確的答案。 – noob

相關問題