-
Notifications
You must be signed in to change notification settings - Fork 42
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产生的新事件。