有时候,我们会判断当前我们的View 是否可见。

常见的判断如:

View.getVisibility() == View.VISIBLE

还有一种是

View.isShown().

这两种有什么区别呢?我们看下的源码:

getVisibility 源码:

@Visibility

public int getVisibility() {

return mViewFlags & VISIBILITY_MASK;

}

isShown 源码:

/**

* Returns the visibility of this view and all of its ancestors

*

* @return True if this view and all of its ancestors are {@link #VISIBLE}

*/

public boolean isShown() {

View current = this;

//noinspection ConstantConditions

do {

if ((current.mViewFlags & VISIBILITY_MASK) != VISIBLE) {

return false;

}

ViewParent parent = current.mParent;

// 如果parent 是null 说明并没有连接到view root

if (parent == null) {

return false; // We are not attached to the view root

}

//最终的ViewParenet 是ViewRootImpl, 会走到这里,返回true

if (!(parent instanceof View)) {

return true;

}

current = (View) parent;

} while (current != null);

return false;

}

我们看到getVisibility 只是查看了一下当前view 的flag,返回结果。

而isShown 方法会先判断当前View 的flag, 然后循环拿到父View,判断是不是可见。只要有一个是不可见的,那么isShown就返回false.

所以,区别就是:

getVisibility 只会判断当前View 是不是可见。isShown 会判断当前View 可见,并且所有的View 树上的parent 也是可见的。

android view.isshown,android View.isShown() 和 getVisibility() 的区别相关推荐

  1. android View.isShown() 和 getVisibility() 的区别

    有时候,我们会判断当前我们的View 是否可见. 常见的判断如: View.getVisibility() == View.VISIBLE 还有一种是 View.isShown(). 这两种有什么区别 ...

  2. android view.isshown,源码解析view的显示判断用isShown()还是View.VISIBLE

    前言 平时我们对View的显示判断都是用简要的方式去判断,那么,究竟是用view.isShown()去判断还是用view. getVisibility() == View.VISIBLE 判断好呢?其 ...

  3. Android 曝光采集,商品view曝光量的统计,判断RecyclerView中某子view是否可见 view是否显示在屏幕中 view展示次数统计...

    近期pm提出需要统计首页商品的曝光亮,由于我们的首页是用的recylerview实现的,这里就来讲下如何使用监听recylerview的滚动事件来实现子view的曝光量统计,我们这里说的view都是列 ...

  4. 源码解析view的显示判断用isShown()还是View.VISIBLE

    前言 平时我们对View的显示判断都是用简要的方式去判断,那么,究竟是用view.isShown()去判断还是用view. getVisibility() == View.VISIBLE 判断好呢?其 ...

  5. android字符显示流程图,Android应用层View绘制流程与源码分析

    1  背景 还记得前面<Android应用setContentView与LayoutInflater加载解析机制源码分析>这篇文章吗?我们有分析到Activity中界面加载显示的基本流程原 ...

  6. android自定义view流程,Android 自定义View--从源码理解View的绘制流程

    前言 在Android的世界里,View扮演着很重要的角色,它是Android世界在视觉上的具体呈现.Android系统本身也提供了很多种原生控件供我们使用,然而在日常的开发中我们很多时候需要去实现一 ...

  7. android自定义view流布局,Android控件进阶-自定义流式布局和热门标签控件

    一.概述: 在日常的app使用中,我们会在android 的app中看见 热门标签等自动换行的流式布局,今天,我们就来看看如何 自定义一个类似热门标签那样的流式布局吧 类似的自定义换行流式布局控件.下 ...

  8. android基础--列表数据View刷新动画

    该效果类似于iPhone中View的切换动画效果 效果一: 效果二: 效果三: 效果四: 效果五(回旋效果一): 效果六(回旋效果二): 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...

  9. android底部滑出view,Android CoordinatorLayout与NestedScrollView基于Behavior几行代码实现底部View滑入滑出...

    Android CoordinatorLayout与NestedScrollView基于Behavior几行代码实现底部View滑入滑出 在CoordinatorLayout的Behavior出现之前 ...

最新文章

  1. VS2010 VS2012 的快捷键
  2. reflow 和 repaint
  3. OSI七层网络模型TCP&UDP
  4. 人工机器:NDC-谷歌机器翻译破世界纪录,仅用Attention模型,无需CNN和RNN
  5. P1063-能量项链【区间dp】
  6. MySQL免安装版安装
  7. Linux下,查看USB设备信息
  8. Java并发编程之CyclicBarrier
  9. 字符集ASCII、GBK、UNICODE、UTF在储存字符时的区别
  10. android播放器实现自动播放,Android实现自动播放图片功能
  11. 第4章 URL管理器和实现方法
  12. 你能识别这些科技公司的真假logo吗?
  13. C++ 面向对象编程
  14. 英国大概率退出欧盟!
  15. crm客户管理软件的精髓
  16. 实时系统性能测试指标及方法
  17. 在TMS320F2812上实现从flash拷贝整个程序到RAM上运行的方法探讨
  18. 用opencv压缩图片
  19. python布尔值使用_如何在Python中使用布尔值?
  20. java人民币金额大写_[求助]用java实现整数转换为人民币金额大写的功能

热门文章

  1. 为什么单片机管脚设计成低电平才有效
  2. openwrt wifi 出现missing ACKs和deauthenticated due to inactivity 频繁掉线问题解决方案
  3. 4000块一晚,住进地下88米深坑,这是全国首家AI超五星酒店
  4. mysql 红黑树_微信大牛教你深入了解数据库索引
  5. WinRAR分卷压缩与解压缩
  6. 二、Docker配置阿里镜像加速器
  7. 螃蟹RTS5733DL固态硬盘,曲线救盘案例……
  8. 图形化显示变量波形 代替串口你知道如何操作么?
  9. python编程实践(一):统计智联招聘数据
  10. 理工生文言文的致谢——小木虫