本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言
View是 Android界面体系非常重要的一块,虽然说 View 不属于四大组件范畴,但是作用堪比四大组件。本文将介绍一下View的基础知识:View坐标系,View的位置参数和MotionEvent。
本文总览
1.与数学坐标系对比
对于移动设备,一般是将左上角视为坐标系原点,向右为X轴正方向,向下为Y轴正方向。 所以在Android中所说的屏幕坐标系与数学中的点坐标系是有区别的。(如下图所示)
后面在开发中所指的坐标系,默认原点都是在左上角,这一点先说明。
2.View的位置参数
在安卓中,坐标系又有Android坐标系(屏幕坐标系)和View坐标系(视图坐标系)区分。
2.1Android坐标系
在Android坐标系中,将屏幕左上角设为原点,原点向下为Y轴正向,原点向右为X正向。
马上讲到MotionEvent中,getRawX()和getRawY()获取的坐标值,就是参照此坐标系得到。
2.2View坐标系
在日常开发中,绘制View等操作使用的点坐标一般是参考View坐标系,获取到相对坐标。
参考以上坐标系,能获取到View一系列常用位置参数:
- View高度:
- View宽度:
- :获取View顶边到其父布局顶边的距离
- :获取View左边到其父布局左边的距离
- :获取View右边到其父布局左边的距离
- :获取View底边到其父布局顶边的距离
通过视图坐标系,指定View中的任意点的相对坐标都可以计算出来
3.MotionEvent
View 源码中 onTouchEvent()
@Override
public boolean onTouchEvent(MotionEvent event) {
...
boolean value = super.onTouchEvent(event);
...
return value;
}
触摸屏幕会产生的一系列事件,典型的事件类型有如下几种:
- ACTION_DOWN——刚接触屏幕;
- ACTION_MOVE——在屏幕上移动;
- ACTION_UP——从屏幕上松开的一瞬间
正常情况下,一次手指触摸屏幕的行为会触发一系列事件,如下:
- 点击屏幕后松开,事件顺序 DOWN -> UP;
- 点击屏幕滑动一会再松开,事件顺序 DOWN -> MOVE-> …> MOVE-> UP
通过MotionEvent,可以得到点击事件发生时的坐标(x, y),Android系统提供了对应方法:getX()/getY() 和 getRawX()/getRawY()
- getX()/getY() 是相对于当前View左上角的x和y坐标;
- getRawX()/getRawY() 是相对于手机屏幕左上角的x和y坐标。
对于MotionEvent进一步理解,等后面分析View 事件分发处理时,还会讲到。
总结
本文就介绍View里常用的与坐标相关的概念,常用坐标系。这些基础知识对后面的自定义View,View事件分发机制都是非常重要的,为其做铺垫。
在掘金(JUEJIN)一起进步!