Android 判断一个 View 是否可见 getLocalVisibleRect(rect) 与 getGlobalVisibleRect(rect)
来源:互联网 发布:droid4x mac 安装失败 编辑:程序博客网 时间:2024/06/09 12:08
这两个方法的区别
- View.getGlobalVisibleRect(rect); //以屏幕 左上角 为参考系的
- View.getLocalVisibleRect(rect); //以目标 View 左上角 为参考系
鉴于这一点的区别,View.getLocalVisibleRect(rect) 的 rect.left
恒等于 0 .
判断是否可见
boolean localVisibleRect = target.getLocalVisibleRect(rect);
进入方法的源码可以看到:
public final boolean getLocalVisibleRect(Rect r) { final Point offset = mAttachInfo != null ? mAttachInfo.mPoint : new Point(); if (getGlobalVisibleRect(r, offset)) { r.offset(-offset.x, -offset.y); // make r local return true; } return false; }
1. true : View 全部或者部分 可见
2. false : View 全部不可见
在返回 true (即 View 全部或者部分 可见)时,r.offset(-offset.x, -offset.y); // make r local
对 rect
的四个坐标进行了偏移.
如果是竖直的 Scrollview 里面的一个 View 在向上滑动的过程中,状态由 全部可见 --> 部分可见 --> 全部不可见
,其Rect.top
的变化是:
注: 这里获取 View 的高度是 height 像素.
- 全部可见 : Rect.top 恒为 0;
- 部分可见 : Rect.top 的值 由 0 --> height
- 全部不可见: 在全部不可见的瞬间,Rect.top 的值由 height 突变为 - height,其后随着滑动的距离越远,负值越大,建议自己打
log
查看下,这里没有截取 log,是因为 log 太多了.
总结: 当 Rect.top 的值不为 0 时,View 要么部分可见,要么完全不可见.那么当我们需要 View 在有一点点不可见时就返回 false 可以这样处理:
//当 View 有一点点不可见时立即返回false!public static boolean isVisibleLocal(View target){ Rect rect =new Rect(); target.getLocalVisibleRect(rect); return rect.top==0; }
可以使用的场景还是很多的,比如类似淘宝滑动可以悬停在顶部的 View,当View 滑到有一点不可见时就需要把 外层的 悬浮View 显示出来,当滑动的 View 完全可见时才把 悬浮的View 隐藏掉.
阅读全文
0 0
- Android 判断一个 View 是否可见 getLocalVisibleRect(rect) 与 getGlobalVisibleRect(rect)
- android view getLeft(), getRight(), getTop(), getBottom()等相对位置 与getGlobalVisibleRect(Rect r)等绝对位置
- Android获取View位置getHitRect、getDrawingRect、getLocalVisibleRect、getGlobalVisibleRect说明
- Android View api 详解-LocationInWindow,getLocationOnScreen,getGlobalVisibleRect,getLocalVisibleRect
- 判断point是否在rect内
- rect
- Rect
- android-Rect
- Android中的Rect与RectF
- 判断view是否可见
- 判断view是否可见
- getGlobalVisibleRect跟getLocalVisibleRect
- getGlobalVisibleRect跟getLocalVisibleRect
- getGlobalVisibleRect和getLocalVisibleRect
- getGlobalVisibleRect和getLocalVisibleRect
- 如何取得一个 View 在屏幕中上的 Rect
- 如何取得一个 View 在屏幕中上的 Rect
- RECT与LPRECT
- [笔记分享] [RPM] RPM T32 dump方法
- hdu1124 数论 java版
- glibc源码解读——malloc
- 9.11第一轮扫荡战果
- Java 集合List、Set、Map特性总结
- Android 判断一个 View 是否可见 getLocalVisibleRect(rect) 与 getGlobalVisibleRect(rect)
- Android 加壳尝试(一)
- Less介绍及其与Sass的差异
- Android 持久化技术
- 4131:Charm Bracelet
- SQL语句使用01----where常用等
- 简易的XListView下拉加载和上拉刷新
- centos7安装MongoDB3.4 以及spring data mongodb的配置使用
- 简述request.getRequestDispatcher(url)与response.sendRedirect(url)的区别