美文网首页
dispatchTouchEvent, onInterceptT

dispatchTouchEvent, onInterceptT

作者: 森屿暖茶 | 来源:发表于2020-03-27 16:43 被阅读0次

在android Touch事件分发分为dispatchTouchEvent, onInterceptTouchEvent, onTouchEvent。

dispatchTouchEvent,是处理触摸事件分发,可以理解为任务发布者,Touch事件的第一个经历者和掌控者。执行

super.dispatchTouchEvent(ev),事件向下分发。

onInterceptTouchEvent,是ViewGroup提供的方法,用于改变事件的传递方向。默认返回false,返回true表示拦截。返回为false时事件会传递给子控件,返回值为true时事件会传递给当前控件的onTouchEvent(),即常说的Intercept(拦截)。

onTouchEvent,事件消费者,返回值决定当前控件是否消费了这个事件。返回true,表示在此处会处理后续事件,在收到ACTION_MOVE或者ACTION_UP处理时,若有子控件,会同时传递给子控件一个ACTION_CANCEL事件;返回false,表示不处理此事件,并返回由父类进行处理。

简单的来看可以把dispatchTouchEvent看作事件的发布者,onInterceptTouchEvent可以看作事件流向中从上而下的各个把关节点,若拦截则不会继续往下分发事件。onTouchEvent可以看作事件的接收者,它可以存在中间节点,它的刘翔是把控事件从下而上的各个节点,若消费(向上拦截),则不会向上反馈结果。

参考借用网上其他大牛的解析图片便于理解。

图1,代表事件既未被拦截也没有被消费,最终dispatchTouchEvent会返回false

图2、3代表事件未被onInterceptTouchEvent拦截,仅仅被最底层命中的view消费了,则不会在向上反馈。

图3、4代表事件被onInterceptTouchEvent拦截,则不会向子层view继续传递事件,同时会给子层view发送ACTION_CANCEL通知子层我拦截事件。

补充:

android中的Touch事件都是从ACTION_DOWN开始的:

单手指操作:ACTION_DOWN---ACTION_MOVE----ACTION_UP

多手指操作:ACTION_DOWN---ACTION_POINTER_DOWN---ACTION_MOVE--ACTION_POINTER_UP---ACTION_UP.

相关文章

网友评论

      本文标题:dispatchTouchEvent, onInterceptT

      本文链接:https://www.haomeiwen.com/subject/nkiluhtx.html