一、背景
在Android开发中,我们常常会对View的可见性visiblity进行操作或者检查。常见的场景有:
- 在消息流中,根据ImageView是否在屏幕中出现了再决定是否加载;
- 在视频流页面,当视频滑入屏幕被用户可见时播放,滑出屏幕就自动停止播放等等;
- 网络请求数据,根据返回的数据结果控制相应View可见或不可见;
- 需要根据view是否可见或第一次可见,做特殊的处理,如埋点上报等操作。
在ListView、RecyclerView、ScrollView里可能会遇到比较多的对View的可视性进行操作或检查的场景。
比如在下面的ScrollView中,根据view自身属性判断view可见性可根据下面四个方法获取:
View5.getVisibility() = View.VISIBLE;
View5.isShown() = true;
View5.getGlobalVisibleRect() = false;
View5.getLocalVisibleRect() = false;
二、检查View是否可见的基本方法
1.View.getVisibility()
这是常用的也是最基本的检查View可见性的方法,这个方法的返回值有View.VISIBLE(可见)、View.INVISIBLE(不可见但占着原来的空间)和View.GONE( 不可见且不占原来的空间)。如果这个方法返回的是View.INVISIBLE或者View.GONE,那么这个View肯定是对用户不可见的。
2.View.isShown()
这个方法和View.getVisibility()作用类似,重要的区别就是:
- getVisibility()返回的是int值,isShown()返回的是boolean值;
- View.isShown()会对View的所有父类调用getVisibility方法。
3.View.getGlobalVisibleRect()
这个方法会返回一个View是否可见的boolean值,同时还会将该View的可见区域left,top,right,bottom值保存在一个rect对象中,具体使用方法如下:
Rect globalRect = new Rect();
boolean visibile = view5.getGlobalVisibleRect(globalRect);
getGlobalVisibleRect(Rect r)最后调用的是getGlobalVisibl