判断视图是否完整可见

来源:互联网 发布:淘宝上的天天特价好吗 编辑:程序博客网 时间:2024/05/04 06:32

知识点:

From the JavaDoc of getGlobalVisibleRect:

/** * If some part of this view is not clipped by any of its parents, then * return that area in r in global (root) coordinates. To convert r to local * coordinates (without taking possible View rotations into account), offset * it by -globalOffset (e.g. r.offset(-globalOffset.x, -globalOffset.y)). * If the view is completely clipped or translated out, return false. * * @param r If true is returned, r holds the global coordinates of the * visible portion of this view. * @param globalOffset If true is returned, globalOffset holds the dx,dy * between this view and its root. globalOffet may be null. * @return true if r is non-empty (i.e. part of the view is visible at the * root level. */

getLocalVisibleRect calls getGlobalVisibleRect and then makes it local as suggested:

r.offset(-offset.x, -offset.y); // make r local`

So:

  • It doesn't return a Rectangle, it returns a boolean. But it can set the parameters of a rectangle you pass, and that must be an android.graphics.Rect rectangle;
  • The rectangle r will be filled with local coordinates;
  • I'm not sure but I think it's the same for visibile and invisible views, while it should return false for views with visibility="gone"

详见http://www.myexception.cn/android/1884660.html


private boolean isViewCompletelyVisible(View view) {    Rect scrollBounds = new Rect();    mRecyclerView.getHitRect(scrollBounds);    if (view.getLocalVisibleRect(scrollBounds)) {        //此控件至少有一个像素在可视范围内        Rect rect = new Rect();        view.getGlobalVisibleRect(rect);        if (YoukuUtil.isPad()) {            if (view.getHeight() <= (rect.bottom - rect.top) &&                    (rect.top >= 0 && rect.top < YoukuUtil.getScreenRealWidth(getActivity().getApplicationContext())) &&                    (rect.bottom > 0 && rect.bottom <= YoukuUtil.getScreenRealWidth(getActivity().getApplicationContext()))) {                return true;            }        } else {            if (view.getHeight() <= (rect.bottom - rect.top) &&                    (rect.top >= 0 && rect.top < YoukuUtil.getScreenRealHeight(getActivity().getApplicationContext())) &&                    (rect.bottom > 0 && rect.bottom <= YoukuUtil.getScreenRealHeight(getActivity().getApplicationContext()))) {                return true;            }        }    }    return false;}

0 0
原创粉丝点击