2014-06-04 50 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

相關問題