事件分发Android自定义View

事件分发机制详解

2019-10-10  本文已影响0人  migill

1 事件分发的对象是谁?

定义:当用户触摸屏幕时,将产生的触摸行为(Touch事件)
主要发生的 Touch 事件有如下四种:
MotionEvent.ACTION_DOWN:手指刚接触屏幕(所有事件的开始)
MotionEvent.ACTION_MOVE:手指在屏幕上面滑动
MotionEvent.ACTION_CANCEL:非人为因素取消
MotionEvent.ACTION_UP:手指从屏幕上松开

事件序列
正常情况下,一次手指触摸屏幕的行为会发出一系列点击事件
1、点击屏幕后立即松开,事件序列为DOWN->UP
2、点击屏幕滑动一会在松开,事件序列为DOWN->MOVE->...->MOVE->UP

2、事件分发的本质

将点击事件(MotionEvent)向某个 View 进行传递并最终得到处理,而这个事件传递的过程就是分发过程。

3 事件在哪些对象之间进行传递?

一个点击事件产生后,传递顺序是:Activity(Window) —> ViewGroup —> View

ViewGroup 是 View 的子类,只不过比起 View,它多了可以包含子 View 和定义布局参数的功能。

4 事件分发过程由哪些方法协作完成?

由 dispatchTouchEvent() 、onInterceptTouchEvent() 和 onTouchEvent() 协作完成。

dispatchTouchEvent():用来进行事件分发,当点击事件能够传递给当前View时,该方法就会被调用
onInterceptTouchEvent():判断是否拦截事件(只存在于ViewGroup中,普通的View没有这个方法),在dispatchTouchEvent()内部调用
onTouchEvent() :处理点击事件,在dispatchTouchEvent()内部调用

5 事件分发结论

通过查看安卓源码中View对dispatchTouchEvent的实现,可以知道onTouchListener(onTouch方法在其中)的接口的执行顺序是要先于onTouchEvent的,onTouch方法会先触发。如果onTouchListener中的onTouch方法返回true,表示此次事件已经被消费了,那onTouchEvent是接收不到消息的。


上一篇 下一篇

猜你喜欢

热点阅读