public boolean isViewCovered(final View view)
{
View currentView = view;
Rect currentViewRect = new Rect();
boolean partVisible =currentView.getGlobalVisibleRect(currentViewRect);
boolean totalHeightVisible = (currentViewRect.bottom - currentViewRect.top) >= adView.getMeasuredHeight();
boolean totalWidthVisible = (currentViewRect.right - currentViewRect.left) >= adView.getMeasuredWidth();
boolean totalViewVisible = partVisible && totalHeightVisible && totalWidthVisible;
if (!totalViewVisible)//if any part of the view is clipped by any of its parents,return true
return true;
while (currentView.getParent() instanceof ViewGroup)
{
ViewGroup currentParent = (ViewGroup) currentView.getParent();
if (currentParent.getVisibility() != View.VISIBLE)//if the parent of view is not visible,return true
return true;
int start = indexOfViewInParent(currentView, currentParent);
for (int i = start + 1; i < currentParent.getChildCount(); i++)
{
Rect viewRect = new Rect();
view.getGlobalVisibleRect(viewRect);
View otherView = currentParent.getChildAt(i);
Rect otherViewRect = new Rect();
otherView.getGlobalVisibleRect(otherViewRect);
if (Rect.intersects(viewRect, otherViewRect))//if view intersects its older brother(covered),return true
return true;
}
currentView = currentParent;
}
return false;
}
private int indexOfViewInParent(View view, ViewGroup parent)
{
int index;
for (index = 0; index < parent.getChildCount(); index++)
{
if (parent.getChildAt(index) == view)
break;
}
return index;
}
该代码段实现了一个方法,用于检查给定的`View`是否完全显示,没有被其父视图或其他兄弟视图遮挡。通过获取`View`的全局可视矩形并比较其尺寸与广告视图的尺寸,判断视图的可见性。如果视图的任何部分被裁剪或者其父视图不可见,则返回true,表示视图被覆盖或不可见。
2080

被折叠的 条评论
为什么被折叠?



