转载

屏幕坐标用法总结

获得当前view在屏幕的坐标

final int[] location = new int[2];    view.getLocationOnScreen(location);   int x = location[0]  ;  int y = location[1]  ;

这样就可以得到该视图在全局坐标系中的x,y值(注意这个值是要从屏幕顶端算起,也就是说包括了通知栏的高度).

获得相对在它父布局里的坐标

View.getLeft() ; View.getTop() ; View.getBottom(); View.getRight() ;  View.getX() ;  View.getY() ;

这些都是相对坐标,例如如果在一个Button外面加一个RelativeLayout,让RelativeLayout宽高是wrap_content, 这样RelativeLayout的大小和Button一样,不管这个RelativeLayout放在窗口的哪里Button.getY()的值都是0.

View.getLocationInWindow()和 View.getLocationOnScreen()的区别

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

getTop()和getY()的区别

一般情况下getTop()和getY()返回值是一样的查看源码 public final int getTop() {  return mTop; } public float getY() {  return mTop + getTranslationY(); }  /**   * The vertical location of this view relative to its {@link #getTop() top} position.   * This position is post-layout, in addition to wherever the object's   * layout placed it.   *   * @return The vertical position of this view relative to its top position,   * in pixels.   */  @ViewDebug.ExportedProperty(category = "drawing")  public float getTranslationY() {   return mRenderNode.getTranslationY();  } 

getY的值是getTop+getTranslationY,这个getTranslationY是自己相对自己顶部的偏移。 可以通过setTranslationY(int mTranslationY) ;设置偏移,默认为0.

获得状态栏和标题栏高度

首先要知道Rect表示一个矩形,可以得到左上和右下角坐标:

屏幕坐标用法总结

Rect rect = new Rect();  //getWindow().getDecorView()得到的View是Window中的最顶层View,可以从Window中获取到该View, //然后该View有个getWindowVisibleDisplayFrame()方法可以获取到程序显示的区域, //包括标题栏,但不包括状态栏。 getWindow().getDecorView().getWindowVisibleDisplayFrame(rect); //1.获取状态栏高度: //根据上面所述,我们可以通过rect对象得到手机状态栏的高度 int statusBarHeight = rect.top;  //2.获取标题栏高度: getWindow().findViewById(Window.ID_ANDROID_CONTENT); //该方法获取到的View是程序不包括标题栏的部分,这样我们就可以计算出标题栏的高度了。 int contentTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop(); //statusBarHeight是上面所求的状态栏的高度 int titleBarHeight = contentTop - statusBarHeight
正文到此结束
Loading...