2012-10-07 32 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

相关问题