检测视图是否重叠

我在另一个尺寸的屏幕上绘制视图有问题! 我需要具有Viewtypes两个参数的方法。 如果第一个视图重叠在第二个视图上,则返回true,在另一个视图中返回false!

在这里输入图像说明

在这里输入图像说明

Berserk感谢你的帮助! 经过一番实验,我写了检测视图重叠与否的方法!

private boolean isViewOverlapping(View firstView, View secondView) { int[] firstPosition = new int[2]; int[] secondPosition = new int[2]; firstView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); firstView.getLocationOnScreen(firstPosition); secondView.getLocationOnScreen(secondPosition); int r = firstView.getMeasuredWidth() + firstPosition[0]; int l = secondPosition[0]; return r >= l && (r != 0 && l != 0); } 

您也可以使用Rect.intersect()来查找重叠视图。

  int[] firstPosition = new int[2]; int[] secondPosition = new int[2]; firstView.getLocationOnScreen(firstPosition); secondView.getLocationOnScreen(secondPosition); // Rect constructor parameters: left, top, right, bottom Rect rectFirstView = new Rect(firstPosition[0], firstPosition[1], firstPosition[0] + firstView.getMeasuredWidth(), firstPosition[1] + firstView.getMeasuredHeight()); Rect rectSecondView = new Rect(secondPosition[0], secondPosition[1], secondPosition[0] + secondView.getMeasuredWidth(), secondPosition[1] + secondView.getMeasuredHeight()); return rectFirstView.intersect(rectSecondView); 

好像你正在问你的问题的代码。 我发布了我认为可能工作的逻辑:

  1. 创build一个将两个视图作为参数的函数,并返回一个布尔值。
  2. 现在使用这个检查屏幕上两个视图的位置。 它会告诉你他们是否重叠的想法。
  3. 根据它返回真或假。

这与Marcel Derks的答案类似,但是不需要额外的input。 它使用形成Rect.intersect的基本代码而不创buildRect对象。

 private boolean isViewOverlapping(View firstView, View secondView) { int[] firstPosition = new int[2]; int[] secondPosition = new int[2]; firstView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); firstView.getLocationOnScreen(firstPosition); secondView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); secondView.getLocationOnScreen(secondPosition); return firstPosition[0] < secondPosition[0] + secondView.getMeasuredWidth() && firstPosition[0] + firstView.getMeasuredWidth() > secondPosition[0] && firstPosition[1] < secondPosition[1] + secondView.getMeasuredHeight() && firstPosition[1] + firstView.getMeasuredHeight() > secondPosition[1]; } 

您不需要强制进行视图测量,但这是为了好的措施;)