Android事件传递

MemoMind


事件经过主要的三层,分别是活动,布局(多个),查看


三者都拥有dispatchTouchEvent和onTouchEvent方法。

还真标志着事件已被消费;返回false标志着事件未被消费,往布局/活动方向传递。


事件就不会继续分发而是跳到布局的onTouchEvent方法中去处理,返回false则事件继续分发。

在众多分析事件机制的文章中,很难看到与ondraw, onClick关联起来的解释。开始时我也拿捏不好ondraw和onTouchEvent的关系。

事实上,ondraw是在onTouchEvent之前执行的。如果ondraw返回true,表示事件已经被消费,不会调用onTouchEvent了。

而onClick呢,则是在onTouchEvent的ACTION_DOWN和ACTION_UP都执行完之后,才会触发onClick。也就是说,在此之前任意位置返回了真的,onClick都不会被调用。


至此,我产生了一个疑问:Android为什么要这么设计事件传递机制?

①onInterceptTouchEvent:是布局特有的,是给予布局对于事件的独立把控权,而不是傻傻的等待事件再冒泡传递回onTouchEvent。

②ondraw:区分于onTouchEvent,给开发者不破坏基础事件传递逻辑(比如按钮的onTouchEvent默认的Super.onTouchEvent()里面是有逻辑判断来决定返回值)的情况下对事件有自己的把控操纵权。



Android事件传递