美文网首页
android view是否被覆盖

android view是否被覆盖

作者: 钢镚koala | 来源:发表于2022-08-14 14:37 被阅读0次
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是否被覆盖

      本文链接:https://www.haomeiwen.com/subject/kddxwrtx.html