博客
关于我
android中getLocationInWindow 和 getLocationOnScreen的区别
阅读量:361 次
发布时间:2019-03-04

本文共 2687 字,大约阅读时间需要 8 分钟。

一个控件在其父窗口中的坐标位置

.getLocationInWindow(int[] location)




一个控件在其整个屏幕上的坐标位置

.getLocationOnScreen(int[] location)





getLocationInWindow是以B为原点的C的坐标

getLocationOnScreen以A为原点。


下面是getLocationOnScreen示例

[java] 
  1. start = (Button) findViewById(R.id.start);  
  2.         int []location=new int[2];  
  3.         start.getLocationOnScreen(location);  
  4.         int x=location[0];//获取当前位置的横坐标  
  5.         int y=location[1];//获取当前位置的纵坐标  


下面是getLocationInWindow示例

[java] 
  1. start = (Button) findViewById(R.id.start);  
  2.         int []location=new int[2];  
  3.         start.getLocationInWindow(location);  
  4.         int x=location[0];//获取当前位置的横坐标  
  5.         int y=location[1];//获取当前位置的纵坐标  

==================================================================================================

 附上源代码

==================================================================================================

.getLocationInWindow(int[] location)

[java] 
  1. /** 
  2.      * <p>Computes the coordinates of this view in its window. The argument 
  3.      * must be an array of two integers. After the method returns, the array 
  4.      * contains the x and y location in that order.</p> 
  5.      * 
  6.      * @param location an array of two integers in which to hold the coordinates 
  7.      */  
  8.     public void getLocationInWindow(int[] location) {  
  9.         if (location == null || location.length < 2) {  
  10.             throw new IllegalArgumentException("location must be an array of two integers");  
  11.         }  
  12.   
  13.         if (mAttachInfo == null) {  
  14.             // When the view is not attached to a window, this method does not make sense  
  15.             location[0] = location[1] = 0;  
  16.             return;  
  17.         }  
  18.   
  19.         float[] position = mAttachInfo.mTmpTransformLocation;  
  20.         position[0] = position[1] = 0.0f;  
  21.   
  22.         if (!hasIdentityMatrix()) {  
  23.             getMatrix().mapPoints(position);  
  24.         }  
  25.   
  26.         position[0] += mLeft;  
  27.         position[1] += mTop;  
  28.   
  29.         ViewParent viewParent = mParent;  
  30.         while (viewParent instanceof View) {  
  31.             final View view = (View) viewParent;  
  32.   
  33.             position[0] -= view.mScrollX;  
  34.             position[1] -= view.mScrollY;  
  35.   
  36.             if (!view.hasIdentityMatrix()) {  
  37.                 view.getMatrix().mapPoints(position);  
  38.             }  
  39.   
  40.             position[0] += view.mLeft;  
  41.             position[1] += view.mTop;  
  42.   
  43.             viewParent = view.mParent;  
  44.          }  
  45.   
  46.         if (viewParent instanceof ViewRootImpl) {  
  47.             // *cough*  
  48.             final ViewRootImpl vr = (ViewRootImpl) viewParent;  
  49.             position[1] -= vr.mCurScrollY;  
  50.         }  
  51.   
  52.         location[0] = (int) (position[0] + 0.5f);  
  53.         location[1] = (int) (position[1] + 0.5f);  
  54.     }  
.getLocationOnScreen(int[] location)

[java] 
  1. /** 
  2.    * <p>Computes the coordinates of this view on the screen. The argument 
  3.    * must be an array of two integers. After the method returns, the array 
  4.    * contains the x and y location in that order.</p> 
  5.    * 
  6.    * @param location an array of two integers in which to hold the coordinates 
  7.    */  
  8.   public void getLocationOnScreen(int[] location) {  
  9.       getLocationInWindow(location);  
  10.   
  11.       final AttachInfo info = mAttachInfo;  
  12.       if (info != null) {  
  13.           location[0] += info.mWindowLeft;  
  14.           location[1] += info.mWindowTop;  
  15.       }  
  16.   }  

 


你可能感兴趣的文章
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>
Mysql中各类锁的机制图文详细解析(全)
查看>>
MySQL中地理位置数据扩展geometry的使用心得
查看>>
Mysql中存储引擎简介、修改、查询、选择
查看>>
Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例
查看>>
mysql中实现rownum,对结果进行排序
查看>>
mysql中对于数据库的基本操作
查看>>
Mysql中常用函数的使用示例
查看>>
MySql中怎样使用case-when实现判断查询结果返回
查看>>
Mysql中怎样使用update更新某列的数据减去指定值
查看>>
Mysql中怎样设置指定ip远程访问连接
查看>>
mysql中数据表的基本操作很难嘛,由这个实验来带你从头走一遍
查看>>
Mysql中文乱码问题完美解决方案
查看>>
mysql中的 +号 和 CONCAT(str1,str2,...)
查看>>
Mysql中的 IFNULL 函数的详解
查看>>
mysql中的collate关键字是什么意思?
查看>>