Android触摸滑动全解(四)——MotionEvent详解
在分析View和ViewGroup的触摸事件时,我们已经接触到了MotionEvent
类,它是用来存储我们当前手指移动的状态的,比如按下、移动、抬起等。其实这个类非常强大,还有许多其他功能,现在我们就来详细分析一下。
一、事件坐标
前面在《View坐标体系详解》中已经介绍过,View有许多获取它的位置的方法,比如getX()
。其实MotionEvent
也有一些类似的方法(getX()
,getRawX()
),不过MotionEvent
的这些方法是用来获取手指按下后当前在屏幕上的位置。
如上图所示:
MotionEvent.getX()
:消费触摸点的View从触摸点到它最左侧的距离。MotionEvent.getY()
:消费触摸点的View从触摸点到它最上侧的距离。MotionEvent.getRawX()
:消费触摸点的View从触摸点到屏幕最左侧的距离。MotionEvent.getRawY()
:消费触摸点的View从触摸点到屏幕最上侧的距离。
二、事件类型
一般涉及到MotionEvent
的代码,都会写成如下形式:
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
这里就引入了关于MotionEvent
的一个重要概念,事件类型。事件类型就是指MotionEvent
对象所代表的动作。比如说,当你的一个手指在屏幕上滑动一下时,系统会产生一系列的触摸事件对象,他们所代表的动作有