欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android View回顾之坐标系

程序员文章站 2022-03-11 21:19:41
前言Android坐标系其实就是一个三维坐标,Z轴向上,X轴向右,Y轴向下。这三维坐标的点处理就能构成Android丰富的界面或者动画等效果。Android 相对坐标系在Android中,将屏幕最左上角的顶点作为Android坐标系的原点,从这个点向右是X轴正方向,从这个点向下是Y轴正方向。如下图所示:View 提供获取坐标方法getTop()获取到的是View自身的顶边到其父布局顶边的距离getLeft()获取到的是View自身的左边到其父布局左边的距离getRight()获取到的...

前言

Android坐标系其实就是一个三维坐标,Z轴向上,X轴向右,Y轴向下。这三维坐标的点处理就能构成Android丰富的界面或者动画等效果。

Android 相对坐标系

在Android中,将屏幕最左上角的顶点作为Android坐标系的原点,从这个点向右是X轴正方向,从这个点向下是Y轴正方向。如下图所示:
Android View回顾之坐标系

View 提供获取坐标方法

  • getTop()
    获取到的是View自身的顶边到其父布局顶边的距离
  • getLeft()
    获取到的是View自身的左边到其父布局左边的距离
  • getRight()
    获取到的是View自身的右边到其父布局左边的距离
  • getBottom()
    获取到的是View自身的底边到其父布局顶边的距离
  • getX()
    获取View左上角的坐标X轴上的坐标(相对于父布局)。返回值为getLeft()+getTranslationX(),注意:View在平移的过程中,getLeft()表示的是原始左上角的X轴距离,其值不会改变。发生改变的是getX()、getTranslationX()
  • getY()
    获取View左上角的坐标Y轴上的坐标(相对于父布局)。返回值为getTop()+getTranslationY(),注意:View在平移的过程中,getTop()表示的是原始左上角的Y轴距离,其值不会改变。发生改变的是getY()、getTranslationY()

Android 绝对坐标系

Android View回顾之坐标系

MotionEvent提供距离相关方法

  • getX()
    获取触摸事件距离控件左边的距离
  • getY()
    获取触摸事件距离控件顶边的距离
  • getRawX()
    获取触摸事件距离整个屏幕左边的距离
  • getRawY()
    获取触摸事件距离整个屏幕顶边的距离

View 宽高相关方法

  • getWidth()
    返回值是mRight-mLeft,一般会参考measure的宽度,调用layout()后有效
  • getHeight()
    返回值是mBottom-mTop,一般会参考measure的高度,调用layout()后有效
  • getMeasuredWidth()
    返回measure过程得到的mMeasuredWidth值,供layout参考
  • getMeasuredHeight()
    返回measure过程得到的mMeasuredHeight值,供layout参考

Android屏幕区域划分

Android View回顾之坐标系
这些区域里常用一些坐标或者度量方式

//获取屏幕区域的宽高等尺寸获取
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int widthPixels = metrics.widthPixels;
int heightPixels = metrics.heightPixels;
//应用程序App区域宽高等尺寸获取
Rect rect = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
//获取状态栏高度
Rect rect= new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
int statusBarHeight = rectangle.top;
//获取状态栏高度
Rect rect= new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
int statusBarHeight = rectangle.top;
//View布局区域宽高等尺寸获取
Rect rect = new Rect();  
getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(rect);  

特别注意: 上面这些方法最好在Activity的onWindowFocusChanged ()方法内或者之后调运,因为只有这时候才是真正的显示。

参考:
Android应用坐标系统全面详解

本文地址:https://blog.csdn.net/xufei5789651/article/details/107596691

相关标签: AndRoid开发