2014-06-04 51 views
6

我有一个RelativeLayout与两个视图里面。视图1在布局中每十秒钟以随机位置重新创建。 view2处于静态位置,比view1大。我想知道何时在第二个视图区域内创建第一个视图,我该怎么做?Android的 - 如何知道是否覆盖另一个视图RelativeLayout

我目前正在尝试此代码,但ID不能正常工作。

 if (paramsView1.topMargin > View2Ystart 
      && paramsView1.topMargin < View2Yend 
      && paramsView1.leftMargin > View2Xstart 
      && paramsView1.leftMargin < View2Xend) { 
     return true 
    } 
    else 
     return false; 

仅当view1触摸view2的一侧时才返回true。我希望它只有在view1完全处于view2内时才会返回true。

+0

您可以获取每个视图的坐标和尺寸,并进行数学运算以确定是否有重叠。 – zgc7009

+0

我目前正试图做到这一点,但没有成功。我在我的问题中添加了一些代码 – TheModularMind

回答

12

您应该使用getLeft(),getRight(),getTop()getBottom()

if (v1.getTop() >= v2.getTop() && 
    v1.getLeft() >= v2.getLeft() && 
    v1.getRight() <= v2.getRight() && 
    v1.getBottom() <= v2.getBottom()) { ... 

要留意的是,这些值将可当父被摆出来,即不addView()之后。

另一种可能更灵活的解决方案是用每个视图的坐标构建Rect实例,例如,

Rect rect1 = new Rect(v1.getLeft(), v1.getTop(), v1.getRight(), v1.getBottom()); 
Rect rect2 = new Rect(v2.getLeft(), v2.getTop(), v2.getRight(), v2.getBottom()); 

然后你可以使用rect1.contains(rect2)Rect.intersects(rect1, rect2)或任何其他组合。

+0

仅当v1在v2之内时,上述说法才是真实的,不是如果它重叠,而是想法存在。 – zgc7009

+0

@ zgc7009问题指定“我希望它只在view2在view2内部完全返回时才返回true”。 – matiash

+0

我认为他在编辑中加入了最后一行,在这种情况下,这工作正常。 – zgc7009

相关问题