Android 判断View是否被遮挡

来源:互联网 发布:重庆行知教育集团 编辑:程序博客网 时间:2024/04/30 15:46

android开发中,我经常会遇到View是否被覆盖的问题,那么,要如何来判断一个View是否被遮挡呢?

原理,通过view的四个顶点坐标,判断view之间是否有重叠的区域,以此来判断view是否被遮挡,但是情况覆盖不全面,需要根据具体情况调整判断策略

public boolean isViewCovered(final View view){         View currentView = view;         Rect currentViewRect = new Rect();         boolean partVisible =currentView.getGlobalVisibleRect(currentViewRect);         boolean totalHeightVisible = (currentViewRect.bottom - currentViewRect.top) >=view.getMeasuredHeight();         boolean totalWidthVisible = (currentViewRect.right - currentViewRect.left) >= view.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;}
0 0
原创粉丝点击