Android 坐标系
一、概述
Android 中 View 分为两种类型,一种为内部可以包含其它子 View 的 ViewGroup
类型,另一种内部不可以再包含其它子 View 的 View
类型。
一个页面上的元素大致如下图所示:
类型 | 控件 |
---|---|
View: | TextView 、Button 、ImageView 等。 |
ViewGroup: | LinearLayout 、FrameLayout 、RelativeLayout 等。 |
关联文章:
- 《View系列 (一) — Android 坐标系》
- 《View系列 (二) — MeasureSpec 详解》
- 《View系列 (三) — Measure 流程详解》
- 《View系列 (四) — Layout 流程详解》
- 《View系列 (五) — Draw 流程详解》
- 《Window系列 (一) — WindowManager 详解》
二、坐标系
Android 系统中有两种坐标系, 分别为 Android坐标系 和 View坐标系。
1. Android 坐标系
说明:
- 坐标原点:屏幕左上角(红点处)。
- X轴正方向:向右
- Y轴正方向:向下
- 触摸事件中,getRawX() 和 getRawY() 方法获得的坐标也是Android坐标系的坐标。
2. View 坐标系
获得 View 控件到其父控件(ViewGroup) 的距离:
- getTop(): 获取 View 自身顶边到其父布局顶边的距离。
- getLeft():获取 View 自身左边到其父布局左边的距离。
- getRight(): 获取 View 自身右边到其父布局左边的距离。
- getBottom():获取 View 自身底边到其父布局顶边的距离。
获取View控件自身的宽度:
width = getRight() - getleft()
获取View控件自身的高度:
height = getBottom() - getTop()
触摸事件中,MotionEvent 提供的获取坐标的方法:
- getX():获取点击事件距离控件自身左边的距离, 即视图坐标。
- getY():获取点击事件距离控件自身顶边的距离, 即视图坐标。
- getRawX() :获取点击事件距离整个屏幕左边的距离, 即绝对坐标。
- getRawY() :获取点击事件距离整个屏幕顶边的距离, 即绝对坐标。
三、控件的绘制流程
View 的绘制是从上往下一层层迭代下来的。DecorView --> ViewGroup(-->ViewGroup)--> View
,按照这个流程从上往下,依次measure()
,layout()
,draw()
,最终计算出整个 View 树的相关属性。流程分析请看 《Window系列 (一) — WindowManager 详解》