您的位置:首页 > 移动开发 > Android开发

Android 判断view是否被遮挡

2015-11-02 10:15 441 查看
原理,通过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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android view被遮挡