android view.isshown,android View.isShown() 和 getVisibility() 的区别
有时候,我们会判断当前我们的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() 的区别相关推荐
- android View.isShown() 和 getVisibility() 的区别
有时候,我们会判断当前我们的View 是否可见. 常见的判断如: View.getVisibility() == View.VISIBLE 还有一种是 View.isShown(). 这两种有什么区别 ...
- android view.isshown,源码解析view的显示判断用isShown()还是View.VISIBLE
前言 平时我们对View的显示判断都是用简要的方式去判断,那么,究竟是用view.isShown()去判断还是用view. getVisibility() == View.VISIBLE 判断好呢?其 ...
- Android 曝光采集,商品view曝光量的统计,判断RecyclerView中某子view是否可见 view是否显示在屏幕中 view展示次数统计...
近期pm提出需要统计首页商品的曝光亮,由于我们的首页是用的recylerview实现的,这里就来讲下如何使用监听recylerview的滚动事件来实现子view的曝光量统计,我们这里说的view都是列 ...
- 源码解析view的显示判断用isShown()还是View.VISIBLE
前言 平时我们对View的显示判断都是用简要的方式去判断,那么,究竟是用view.isShown()去判断还是用view. getVisibility() == View.VISIBLE 判断好呢?其 ...
- android字符显示流程图,Android应用层View绘制流程与源码分析
1 背景 还记得前面<Android应用setContentView与LayoutInflater加载解析机制源码分析>这篇文章吗?我们有分析到Activity中界面加载显示的基本流程原 ...
- android自定义view流程,Android 自定义View--从源码理解View的绘制流程
前言 在Android的世界里,View扮演着很重要的角色,它是Android世界在视觉上的具体呈现.Android系统本身也提供了很多种原生控件供我们使用,然而在日常的开发中我们很多时候需要去实现一 ...
- android自定义view流布局,Android控件进阶-自定义流式布局和热门标签控件
一.概述: 在日常的app使用中,我们会在android 的app中看见 热门标签等自动换行的流式布局,今天,我们就来看看如何 自定义一个类似热门标签那样的流式布局吧 类似的自定义换行流式布局控件.下 ...
- android基础--列表数据View刷新动画
该效果类似于iPhone中View的切换动画效果 效果一: 效果二: 效果三: 效果四: 效果五(回旋效果一): 效果六(回旋效果二): 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...
- android底部滑出view,Android CoordinatorLayout与NestedScrollView基于Behavior几行代码实现底部View滑入滑出...
Android CoordinatorLayout与NestedScrollView基于Behavior几行代码实现底部View滑入滑出 在CoordinatorLayout的Behavior出现之前 ...
最新文章
- VS2010 VS2012 的快捷键
- reflow 和 repaint
- OSI七层网络模型TCP&UDP
- 人工机器:NDC-谷歌机器翻译破世界纪录,仅用Attention模型,无需CNN和RNN
- P1063-能量项链【区间dp】
- MySQL免安装版安装
- Linux下,查看USB设备信息
- Java并发编程之CyclicBarrier
- 字符集ASCII、GBK、UNICODE、UTF在储存字符时的区别
- android播放器实现自动播放,Android实现自动播放图片功能
- 第4章 URL管理器和实现方法
- 你能识别这些科技公司的真假logo吗?
- C++ 面向对象编程
- 英国大概率退出欧盟!
- crm客户管理软件的精髓
- 实时系统性能测试指标及方法
- 在TMS320F2812上实现从flash拷贝整个程序到RAM上运行的方法探讨
- 用opencv压缩图片
- python布尔值使用_如何在Python中使用布尔值?
- java人民币金额大写_[求助]用java实现整数转换为人民币金额大写的功能