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 senselocation[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
====================================================================================