一、MotionEvent
这是Android为触摸事件封装的一个类。只要是重写触摸相关方法,参数一般都含有MotionEvent,可见其重要性。其中包括的一些常用的重要属性和方法:
- MotionEvent.ActionDown:手指按下
- MotionEvent.ActionMove:滑动
- MotionEvent.ActionUp:手指抬起
- getX():获取相对于控件左上角的X轴(横向)坐标
- getY():获取相对于控件左上角的Y轴(纵向)坐标
二、Touch事件相关方法
- dispatchTouchEvent()事件分发
当Touch事件发生时,dispatchTouchEvent()方法会以隧道方式(即从根元素依次向内层元素传递)将事件向下传递。一般来说我们不会去改写这个方法
return true :事件交由当前view进行消费,同时事件停止向下传递
return false:事件交由上层view或者Activity进行消费
return super.dispatchTouchEvent():系统默认的事件分发处理逻辑
- onInerceptTouchEvent()事件拦截
该方法只有ViewGroup拥有。
return true:表示拦截事件,把拦截的事件交由当前的view处理
return fasle:表示不拦截事件,事件会被传递到子view的dispatchTouchEvent()来进行事件分发
- onTouchEvent()事件响应
onTouchEvent()方法会以冒泡方式(即从最内层的子元素依次向外传递)将事件向上传递。
return true:表示消费了事件,事件停止向上传递
return false:表示没有处理事件,事件继续向上传递
return super.onTouchEvent():默认处理事件的逻辑,和返回false差不多
我们也可以看着下图帮助理解,当ViewGroup拦截事件时就会停止向下分发并交给同层的事件消费进行处理。
-------------------------------Android群英传第三章