花门楼前见秋草,岂能贫贱相看老。这篇文章主要讲述我的Android进阶之旅------&
gt;
android中getLocationInWindow 和 getLocationOnScreen的差别相关的知识,希望能为你提供帮助。
View.getLocationInWindow(int[] location)
一个控件在其父窗体中的坐标位置
View.getLocationOnScreen(int[] location)
一个控件在其整个屏幕上的坐标位置
getLocationInWindow是以B为原点的C的坐标
getLocationOnScreen以A为原点。
以下是getLocationOnScreen演示样例
start = (Button) findViewById(R.id.start); int []location=new int[2]; start.getLocationOnScreen(location); int x=location[0]; //获取当前位置的横坐标 int y=location[1]; //获取当前位置的纵坐标
以下是getLocationInWindow演示样例
start = (Button) findViewById(R.id.start); int []location=new int[2]; start.getLocationInWindow(location); int x=location[0]; //获取当前位置的横坐标 int y=location[1]; //获取当前位置的纵坐标
==================================================================================================
附上源码
==================================================================================================
View.getLocationInWindow(int[] location)
/** * < 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 * contains the x and y location in that order.< /p> * * @param location an array of two integers in which to hold the coordinates */ public void getLocationInWindow(int[] location) { if (location == null || location.length < 2) { throw new IllegalArgumentException(" location must be an array of two integers" ); }if (mAttachInfo == null) { // When the view is not attached to a window, this method does not make sense location[0] = location[1] = 0; return; }float[] position = mAttachInfo.mTmpTransformLocation; position[0] = position[1] = 0.0f; if (!hasIdentityMatrix()) { getMatrix().mapPoints(position); }position[0] += mLeft; position[1] += mTop; ViewParent viewParent = mParent; while (viewParent instanceof View) { final View view = (View) viewParent; position[0] -= view.mScrollX; position[1] -= view.mScrollY; if (!view.hasIdentityMatrix()) { view.getMatrix().mapPoints(position); }position[0] += view.mLeft; position[1] += view.mTop; viewParent = view.mParent; }if (viewParent instanceof ViewRootImpl) { // *cough* final ViewRootImpl vr = (ViewRootImpl) viewParent; position[1] -= vr.mCurScrollY; }location[0] = (int) (position[0] + 0.5f); location[1] = (int) (position[1] + 0.5f); }
View.getLocationOnScreen(int[] location)
/** * < p> Computes the coordinates of this view on the screen. The argument * must be an array of two integers. After the method returns, the array * contains the x and y location in that order.< /p> * * @param location an array of two integers in which to hold the coordinates */ public void getLocationOnScreen(int[] location) { getLocationInWindow(location); final AttachInfo info = mAttachInfo; if (info != null) { location[0] += info.mWindowLeft; location[1] += info.mWindowTop; } }
==================================================================================== 作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:http://blog.csdn.net/ouyang_peng
====================================================================================
文章图片
【我的Android进阶之旅------& gt; android中getLocationInWindow 和 getLocationOnScreen的差别】
推荐阅读
- Android源代码之DeskClockProxy/Delegate Application 框架应用
- 切换winXP系统游戏情况下多用户掉线问题
- 为啥wifi的ID中文名显示乱码?
- winXP设置系统无线热点创建有啥要求
- XP系统“Windows安全警报”作用及如何禁用此技巧
- Windows技巧:无线网络出现IP冲突如何办?
- ipv4与ipv6的区别?如何让ipv4与ipv6它们共存?
- 浅谈Win7 32位系统下开机自动运行的软件防范办法
- 小技巧破解XP系统的登录密码