zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

我的Android进阶之旅------>android中getLocationInWindow 和 getLocationOnScreen的区别

Androidamp 区别 之旅 进阶 gt ------&
2023-09-27 14:29:23 时间
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 | 音视频方向进阶路线及资源合集 但是系统相机和系统控件VideoView的局限性都是可定制型太差,系统相机的图像分辨率,视频码率以及VideoView的进度条等.
字节卷动 You will never know how excellent you are unless you impel yourself once.