如何找到左,右,顶,底视图

Posted

技术标签:

【中文标题】如何找到左,右,顶,底视图【英文标题】:how to find left,right,top,bottom View 【发布时间】:2012-10-07 21:26:35 【问题描述】:

我需要知道 TableLayout 中添加的每个 View 的左、右、上、下(LRTB)视图 场景如下

TableLayout 有 3 个 TableRows 每个 TableRow 有 3 个 ImageViews 就像一个 3x3 的 ImageView 矩阵

XXXXXXXXX

我知道 TableLayout 和 TableRow 有一个名为 getChildAt(int index) 的方法 但是如何使用该方法或任何其他方式来查找每个视图的 LRTB 视图

【问题讨论】:

请详细说明..你想达到什么目的??也可以提供一些代码,以便有人可以真正帮助... 如果您正在尝试制作像 TIC TAC TOE 这样的游戏。那我可以帮忙…… 【参考方案1】:

我猜你正在开发 Tac tac toe 那种应用程序。所以基本上你需要一个包含 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);

【讨论】:

但是,如果您只保留每个视图的一个对象并为每个视图设置一个属性,那会简单得多。【参考方案2】:

您可以使用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,您可能会考虑只更改它们的可绘制对象,这样您就可以构建接受视图 ID 并返回上方、下方等视图的方法。

【讨论】:

以上是关于如何找到左,右,顶,底视图的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点#three.js中如何切换相机视角

第三视角中的左视图和右视图怎么区分

ps怎么把文字对齐虚线 。求大神

iOS将autoLayout按钮位置设置为故事板中心的剩余空间

以编程方式切换视图时iphone tableviewcontroller左/右滑动?

在 iOS 中检测 PAN 手势的方向