我有一个RelativeLayout,里面有两个视图。每隔十秒,在布局内以随机位置重新创建view1。 view2处于静态位置,比view1大。我想知道在第二个视图区域内创建第一个视图的时间,我该怎么做?
我目前正在尝试使用此代码,但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 :(得分:13)
您应该使用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)
或任何其他组合。