Skip to content

Android(2): 事件分发机制

clarkehe edited this page May 25, 2016 · 6 revisions

这个是同事nibble总结的事件分发流程,比较清楚了。清楚了事件流转机制对处理一些特殊的交互场景比较有用。 事件分发流程图

事件分发机制有两个关键点:
第一个关键点在ViewGroup。事件是从布局树的根结点DecorView开始分发的,DecorView就是一个ViewGroup。 ViewGroup处理事件的函数是:dispatchTouchEvent。ViewGroup可通过回调函数onInterceptTouchEvent来拦截当前事件。如果拦截了,事件不会再分发给当前ViewGroup的子View;不拦截,则一层一层向下分发,一直找到愿意处理这个事件的View。

第二个关键点在View。View是布局树的叶子结点,事件分发到View就停止了。View事件入口函数也是:dispatchTouchEvent,处理流程有两个结点:mOnTouchListener和onTouchEvent。mOnTouchListener默认为空,可自定义设置。mOnTouchListener可以监听到Event事件,并对事件进行拦截。如果mOnTouchListener的接口函数onTouch返回True,onTouchEvent则会被跳过。onTouchEvent的作用是将Down、Up等事件转化点击事件。Down、Up是基础事件,点击事件则是由多个Down、Up产生的新事件。

Clone this wiki locally