面试之Android事件分发机制
事件分发的本质
当一个点击事件发生后,系统需要将这个事件传递给一个具体的View去处理。这个事件传递的过程就是分发过程。
首先了解一下事件分发的对象
也就是事件
当用户触摸屏幕时(View或ViewGroup派生的控件),将产生点击事件(也就是Touch事件)。
Android将Touch事件相关细节(发生触摸的位置、时间、历史记录、手势动作等)封装成MotionEvent对象
主要发生的Touch事件有四种:
- MotionEvent.ACTION_DOWN:按下View(所有事件的开始)
- MotionEvent.ACTION_MOVE:滑动View
- MotionEvent.ACTION_CANCEL:非人为原因结束本次事件
- MotionEvent.ACTION_UP:抬起View(与DOWN对应)
所以说从手指接触屏幕至手指离开屏幕,这个过程会产生一系列事件, 任何事件列都是以DOWN事件开始,UP事件结束,中间有无数的MOVE事件.
接下来说下具体的事件传递流程:
一个点击事件产生后,传递顺序是:Activity(Window) -> ViewGroup -> View
参与事件分发的主要事件
事件分发过程主要由dispatchTouchEvent() 、onInterceptTouchEvent()和onTouchEvent()三个方法协助完成
当我们需要对点击事件进行处理的时候可以通过改变这几个方法的返回值来达到具体的分发需求.
首先讲一下一般的点击事件处理情况
首先是默认情况:即不对控件里的方法(dispatchTouchEvent()、onTouchEvent()、onInterceptTouchEvent())进行重写或更改返回值
---------------------------------------------------------------------持续更新-----------------------------------------------------