如何取得View的位置之View.getLocationInWindow()的小秘密

Android笔记:getLocationInWindow 和 getLocationOnScreen的区别 以及computeVerticalScrollOffset getLocationOnScreen:计算该视图在全局坐标系中的x,y值,(注意这个值是要从屏幕顶端算起,也就是索包括了通知栏的高度)//获取在当前屏幕内的绝对坐标。(可以看到上面判断上拉时多减了一个1,是因为计算过程中有些float和int的转换,多减个1是为了保险起见,最多也就是吃掉view一个像素的高度而已)getLocationInWindow ,计算该视图在它所在的widnow的坐标x,y值,//获取在整个窗口内的绝对坐标。当Offset大于0时,可以继续下拉,当Offset等于0时,不可以。 阅读详情

        最近做项目时,发现在activity的onCreate()和onResume()方法里调用View.getLocationInWindow()时,View.getLocationInWindow()返回空值,觉得很奇怪,因为以前用过,没有发现这个问题,于是调查了一下源码,这里把调查结果做个记录。

       首先,看看View.getLocationInWindow()的实现,

    public void getLocationInWindow(int[] location) {
        // When the view is not attached to a window, this method does not make sense
        if (mAttachInfo == null) return;
        ... ...
    }

       这里有注释,说明当view没有绑定到window时,返回在window里的坐标是没有意义的。的确,窗口都没有,哪来的窗口坐标呀!!

       其次,看看view何时合适绑定到窗口。通过阅读源码,发现下面这段代码:

   void dispatchAttachedToWindow(AttachInfo info, int visibility) {
        //System.out.println("Attached! " + this);
        mAttachInfo = info;
        ... ...
   }

       看到这里,可能会想在activity.onAttachedToWindow()函数里是不是能通过调用View.getLocationInWindow()取得view在window中的位置呢?实验一下,发现还是不能!!怪异了,接着再看,总结出如下时序图:

       从上图我们可以看出activity.onAttachedToWindow()的调用在View.dispatchAttachedToWindow()之前,此时View还是没有绑定到window上,所以在activity.onAttachedToWindow()里调用View.getLocationInWindow()无效。       

       最后,何时调用View.dispatchAttachedToWindow()才能得到有效值呢?其实上面已经有答案了,那就是从此以后都可以了,例如activity.onWindowFocusChanged()函数。
 

备注:

// 获取在当前窗口内的绝对坐标
View.getLocationInWindow()

// 获取在整个屏幕内的绝对坐标,注意这个值是要从屏幕顶端算起,也就是包括了通知栏的高度。
View.getLocationOnScreen()

// 下面一组是获取相对在它父窗口里的坐标。
View.getLeft() , View.getTop(), View.getBottom(), View.getRight()

View.getLocationInWindow()和 View.getLocationOnScreen()在window占据全部screen时,返回值相同,不同的典型情况是在Dialog中时。当Dialog出现在屏幕中间时,View.getLocationOnScreen()取得的值要比View.getLocationInWindow()取得的值要大。

 

 

我的Android进阶之旅------>android中getLocationInWindow 和 getLocationOnScreen的区别 View.getLocationInWindow(int[] location) 一个控件在其父窗口中的坐标位置 View.getLocationOnScreen(int[] location) 一个控件在其整个屏幕上的坐标位置 getLocationInWindow是以B为原点的C的坐标 getLocationOnScreen以A为原点。 下面... 阅读详情

相关推荐

记录Nvidia AGX Orin的配置日常(二)设置上电自动开机和远程桌面

因为要拿AGX作为机器人的主控板,所以需要给他设置一下通电后无需按电源键就自动开机,然后再配置一下远程桌面。

AutomaticForever的博客 1361

android_基础_控件获取在其父窗口和屏幕上的坐标位置getLocationInWindow/getLocationOnScreen

原文链接:http://blog.csdn.net/ouyang_peng/article/details/46902957 //一个控件在其父窗口中的坐标位置 View.getLocationInWindow(int[] location); //一个控件在其整个屏幕上的坐标位置 View.getLocationOnScreen(int[] location); getLocationInWindow是以B为原点的C的坐标 getLocationOnScree

写bug的蚊子的博客 2692

手把手教你用vivado2018.3为复旦微JFMQL15T打IP补丁(含环境变量配置技巧)

本文详细介绍了在Vivado 2018.3环境中为复旦微JFMQL15T开发板打IP补丁的全流程,包括环境变量配置、IP缓存管理等关键步骤。通过实战验证的解决方案,帮助工程师快速搭建开发环境,解决国产芯片开发中的常见问题,提升开发效率。

weixin_30374009的博客 723

如何获取控件的坐标位置

如何获取控件的坐标位置,getLocationInWindow和getLocationOnScreen有何区别

海纳百川Android的博客 4899

MapGIS地质剖面图绘制实战:从数据准备到整饰出图

本文详细解析了MapGIS地质剖面图绘制的全流程,从数据准备到整饰出图,涵盖了等高线处理、GRD格网化、比例尺控制等关键步骤。通过实战技巧和案例分析,帮助地质工作者高效完成专业地质剖面图绘制,提升矿产勘探和工程勘察的工作效率。

weixin_28335283的博客 591

伪距单点定位推导+DOP值分析(附matlab仿真代码)

伪距单点定位公式推导、DOP值分析与matlab仿真分析

shannanshouyin的博客 2511

Android:获取View视图在屏幕坐标方法总结

一 View在屏幕上的占用区域、显示区域、绘制区域 二 padding值喝Margin值的获取 根据上图可以知道,padding其实就是代表view的内容与view之间的距离,而Margin值代表的则是view和父view之间的距离 padding和margin的值可以在xml文件中设置,所以只要xml文件被加载,不论View是否被绘制,都可以获取这些值。 三 View的getLeft()、getTop()、getRight()、getBottom()方法 ...

qq_39431405的博客 1万+

【Autosar COM】Marvell 88Q5050 以太网交换机驱动技术解析

本驱动实现了对Marvell 88Q5050交换机的全面控制,通过模块化设计满足AUTOSAR规范要求。增加DMA加速机制提升大数据量处理性能实现TSN(时间敏感网络)特性支持引入异步通知机制替代轮询操作增强安全特性,如MACsec支持该驱动架构为车载以太网交换机控制提供了可靠基础,其设计思想可推广到其他车载网络控制器开发中。随着车载网络技术的演进,驱动需持续迭代以支持新特性与更高通信速率需求。

1450

Android 坐标系相关

1.getLocationInWindow和getLocationOnScreen ①一个控件在其父窗口中的坐标位置 View.getLocationInWindow(int[] location) ②一个控件在其整个屏幕上的坐标位置 View.getLocationOnScreen(int[] location) getLocationInWindow是以B为原点的C的坐标 getLocationOnScreen以A为原点。 ①getLocationOnScreen示例: st..

zenmela2011的专栏 948

对MixPad精灵(触屏语音开关)进行解剖分析

概述 最近有点忙,已经很久没有更新文章了,对不起各位网友啦~ 这次对ORVIBO的新产品:MixPad精灵款的来个剖析,希望对大家有所帮助! 首先,我买了一台对应的设备,直接去官网采购,价格吗还算OK,400多的价格。 拆箱的过程我就不写了,简单的上个图就行了。 一、拆包: 主屏板包装盒(顶部): 主屏板包装盒(底部): 后盖电源部分无内容,我就不拍了,给优快云空间省点存储位置。 二、设备剖析开始 接下来,我们开始对设备进行剖析,步骤如下: 1、拆掉主屏板后盖板,...

LeeKwen的专栏 3941

Joule 终于会说 ABAP 了:从 ADT 提效到 ABAP AI SDK + ISLM 自建企业级 AI 场景的落地路线

生成结构化摘要(故障现象、初步原因、处理动作、备件消耗)自动给出建议分类(电气、机械、软件、网络)把摘要回写到工单抬头,方便后续统计与知识沉淀如果你用 CAP 来做这类服务,通常会在 Node.js 层封装一个对 AI Hub 的调用,再通过 OData 或 Event 把结果写回 SAP。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 342

android view getlocationinwindow,android getLocationInWindow()的小秘密

最近做项目时,发现在activity的onCreate()和onResume()方法里调用View.getLocationInWindow()时,View.getLocationInWindow()返回空值,觉得很奇怪,因为以前用过,没有发现这个问题,于是调查了一下源码,这里把调查结果做个记录。首先,看看View.getLocationInWindow()的实现,publicvoidgetLoca...

weixin_34530398的博客 544

【图像超分】论文精读:SRConvNet: A Transformer-Style ConvNet for Lightweight Image Super-Resolution

本文提出了一种轻量级图像超分辨率重建方法SRConvNet,结合了卷积神经网络和Transformer的优势。针对传统Transformer计算复杂度高的问题,设计了傅立叶调制注意力(FMA)替代自注意力机制,通过区域频率空间调制实现高效的全局依赖建模;同时引入动态混合层(DML),采用混合尺度动态卷积结合通道拆分机制增强局部特征提取。实验表明,SRConvNet在计算效率和参数数量上显著优于现有轻量级超分方法,同时保持了优异的重建性能。该方法为移动端部署提供了有效的解决方案,在精度与复杂度间取得了良好平衡

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 806

View getLocationInWindow getLocationOnScreen

I ended up solving this issue by determining the height of the status/notification bar like so: View globalView = ...; // the main view of my activity/application DisplayMetrics dm = new DisplayMe...

bolutes 189

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

使用getLocationInWindow或getLocationOnScreen获得View在屏幕中的坐标

在View提供了两个方法这样的方法,我们可以利用它们来获得View在屏幕中的坐标: /** * <p>Computes the coordinates of this view in its window. The argument * must be an array of two integers. After the method returns, the array ...

chinaboyliusir的博客 6220

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

view.getLocationOnScreen(location)和view.getLocationInWindow(location)的区别

getLocationOnScreen作用

clzolo的博客 694

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

你真的理解 getLocationInWindow 了吗?

近期项目比较忙,今日才有时间给大家分享android的一些实用的知识~ what is getLocationInWindow android中一种获取view坐标的方法,获取在当前窗口内的绝对坐标。int[] location = new int[2] ;view.getLocationInWindow(location);解释:location[0] -----> x坐标locatio...

weixin_33882452的博客 809

View获取位置

本文参考了: 1.优快云博主「chaseDreamer_」的原创文章 原文链接:https://blog.csdn.net/chasedreamer_/article/details/97262581 2.《Android开发艺术探索》 1.getLocationInWindow 这个方法是将view的左上角坐标存入数组中.此坐标是相对当前activity而言. 若是普通activity,则y坐标为可见的状态栏高度 + 可见的标题栏高度 + view左上角到标题栏底部的距离。 可见的意思是:在隐藏了状.

Chance00的博客 680

关于View的获取位置的api

View.getLocationInWindow(int[]location); View.getLocationOnScreen(int[] location); View.getLocalVisibleRect(Rect r); View.getGlobalVisibleRect(Rect r); 四个方法的具体说明和使用

zswqaxcde的博客 576

android之View坐标解析

1、view获取自身坐标:getLeft(),getTop(),getRight(),getBottom() getTop:是view自身的顶边到其父布局顶边的距离 getLeft:是view自身的左边到其父布局左边的距离 getRight:是view自身的右边到其父布局左边的距离 getBottom:是view自身的底边到其父布局顶边的距离 2、view获取自身宽高:getHeight(...

欢迎关注微信公众号:DroidMind 849

android中getLocationInWindow 和 getLocationOnScreen的区别

一个控件在其父窗口中的坐标位置 View.getLocationInWindow(int[] location) 一个控件在其整个屏幕上的坐标位置 View.getLocationOnScreen(int[] location) getLocationInWindow是以B为

tiantaiaiqing的专栏 469

如何正确调用getLocationInWindow/…

这两个函数可以获得View在Window和Screen中的位置。Screen是整个屏幕,不属于应用的状态条也计算在内。     但我一开始调用这两个函数的时候返回的数组总是{0, 0}。没办法,先找Reference,没内容。Google找到了,说调用这两个函数的时候必须保证布局已完成。经我测试:在onCreate/onStart/onResume的时候,都不能成功。     继续google,

runyon的博客 1688
上一篇: 面向对象的一些术语精解
下一篇: Android 4.0.4系统在线升级实现过程中的一些问题总结
imyfriend
博客等级 码龄23年 299粉丝 65原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值