Android中我们经常会用到判断View的可见行,当然有人会说View.VISIBLE就可以了,但是有时候这个真是满足不了,有时候我们为了优化,在View滚到得不可见的时候或者由于滚到只显示了部分内容的时候不做某些操作,View.VISIBLE这个时候是满足不了的。

1. onWindowVisibilityChanged检测滚到导致View可见或者不可见

比如在 ScrollView(RecyclerView和ListView等都一样)中滚动,会对其中的view产生生命周期影响,可以参考一下:深入理解Android V€iew 生命周期

当 ScrollView 中的view滚动导致View不可见了,会调用 onWindowVisibilityChanged 方法,注意是完全不可见才会调用 onWindowVisibilityChanged,当滚到导致View部分可见的时候也会调用onWindowVisibilityChanged方法,注意是部分可见也会调用,这样就可以监听滚动控件中View的可见性。

我们可以重写onWindowVisibilityChanged方法:

@Override

protected void onWindowVisibilityChanged(int visibility) {

super.onWindowVisibilityChanged(visibility);

if (visibility == View.VISIBLE){

WLog.d("danxx" ,"可见");

//开始某些任务

}

else if(visibility == INVISIBLE || visibility == GONE){

WLog.d("danxx" ,"不可见");

//停止某些任务

}

}

2. getGlobalVisibleRect检测View是部分可见或者完全可见

onWindowVisibilityChanged方法只能判断滚动控件中View的可见或者不可见,无法判断是完全可见或者是部分可见。使用下面的方法就可以判断View是不是只是部分可见:

/**

* 检测是否被遮住显示不全

*@return

*/

protected boolean isCover() {

boolean cover = false;

Rect rect = new Rect();

cover = getGlobalVisibleRect(rect);

if (cover) {

if (rect.width() >= getMeasuredWidth() && rect.height() >= getMeasuredHeight()) {

return !cover;

}

}

return true;

}

其实就是用可见的宽高跟View实际的宽高作比较。

3. 总结

onWindowVisibilityChanged 和 isCover方法结合使用,可以满足我们大部分需要!

android view可见性监听,Android检测View的可见性相关推荐

  1. android 屏幕方向监听,Android如何监听屏幕旋转

    背景 关于个人,前段时间由于业务太忙,所以一直没有来得及思考并且沉淀点东西:同时组内一个个都在业务上能有自己的思考和总结,在这样的氛围下,不由自主的驱使周末开始写点东西,希望自己除了日常忙于业务,可以 ...

  2. android底层按键监听,Android应用中Back键的监听及处理实例

    MainActivity如下: package cn.testnbackpressed; import android.os.Bundle; import android.view.KeyEvent; ...

  3. android触摸滑动监听,Android 滑动监听的实例详解

    Android 滑动监听的实例详解 摘要: ScollBy,ScollTo是对内容的移动,view.ScollyBy是对view的内容的移动 view,ScollTo是对内容的移动(移动到指定位置), ...

  4. android gridview滑动监听,Android GridView 滑动条设置一直显示状态(推荐)

    Android GridView 滑动条设置一直显示状态(推荐) 模拟GridView控件: android:id="@+id/picture_grid" android:layo ...

  5. android 屏幕方向监听,android 屏幕旋转问题 - jwzhangjie的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

    settings设置 在Android的Settings-> Display中有Orientation这一设置项.当选中时,屏幕会随设备旋转. settings设置是在文件SoundAndDis ...

  6. android 界面切换监听,Android切换页面--setContentView

    setContentView 一般切换页面,通过Intent,startActivity可以实现,但系统创建Activity是非常耗时的,如果对切换画面时间有要求,只能用setContentView在 ...

  7. android scrollview 滚动监听,Android开发之ScrollView的滑动监听

    我们需要监听ScroView的滑动情况,比如滑动了多少距离,是否滑到布局的顶部或者底部.可惜的是SDK并没有相应的方法,不过倒是提供了一个 protected void onScrollChanged ...

  8. android edittext 光标监听,Android EditText监听器,用于光标位置更改

    我有一个EditText对话框. EditText在创建时已经填充.当用户将光标放置在文本的特定部分或其附近时,Toast将弹出. 我的问题是监听光标位置的变化.另一个post提出同样的问题,并且接受 ...

  9. android edittext的监听,android editText 监听事件

    在软键盘中注意 在监听的 edittext中 使用android:imeOptions属性的时候,一定要对EditText设置 android:inputType 或者 设置 android:sing ...

最新文章

  1. 自行车为什么前轮和后轮受到的摩擦力相反呢 自行车前轮后轮转动方向一样 自行车运动原理...
  2. 大学计算机基础课程报告python-Python程序设计习题解析(大学计算机基础教育规划教材)...
  3. 机器人学习--机器人仿真环境汇总
  4. 《算法导论》学习总结 — 21.第16章 贪心算法(1) 基础入门1
  5. VC 打开目录对话框
  6. c语言去字母的其中三个,请问这个用c怎么做:输入一串字符,分别统计其中数字和字母的个数...
  7. Go Web:HttpRouter路由
  8. 【视频】文本挖掘:主题模型(LDA)及R语言实现分析游记数据
  9. Java后端开发框架
  10. 小区广播机制(MIB、SIB)
  11. 投票系统C语言程序,C语言课程投票程序系统.doc
  12. HbuilderX表格练习2
  13. 云笔记有什么功能作用,浏览器如何添加云笔记插件
  14. 【历史上的今天】5 月 22 日:Windows 3.0 发布;虚幻引擎诞生;《吃豆人》问世
  15. 02-CPU基础知识:通俗易懂方式理解主频、核心、线程、缓存、架构
  16. Python网络爬虫实战之Fiddler抓包今日头条app!附代码
  17. php7随机数random_int()
  18. 程序员团队名称和口号_济南市大学生双创孵化平台创业菁英实训营2019年第五期【最具人气创业团队】由你来选!...
  19. 每日一道leetcode(python)46. 全排列
  20. 解决QQ客服链接点开后不能进入添加好友或者聊天界面

热门文章

  1. 刘慈欣点赞科幻电影《流浪地球》:震撼心灵
  2. 区块链电子签名技术及方案
  3. 助力智慧校园建设,数据宝可信身份认证支撑校园内多场景的基础服务建设
  4. 【Matlab】混合整数规划
  5. 计算机证书的编号查询
  6. 15 flvjs 播放 ws 服务代理的不存在的 rtsp 连接, Cannot read properties of null (reading ‘flushStashedSamples‘)
  7. 宁盾动态密码案例: 国内某大型油田OA集成dKey动态口令牌认证功能
  8. 免费馅饼(天上掉馅饼)
  9. newlib nano 模式
  10. 记 cisco ucs b200 m3 部署esxi 6.7