[Android高级进阶] - 触摸事件的传递机制

来源:互联网 发布:淘宝客服设置自动回复 编辑:程序博客网 时间:2024/05/22 00:09

  主要本文的主要的内容来源《Android 高级进阶》(顾浩鑫/著)图书


先看一下思维导线



Android View(除ViewGroup的控件) 的事件处理机制,我们可以理解成一个场景。当用户开始一个触摸的事件, 就行先从最外的Activity开始, 首先会问, dispatchTouchEvent是否要继续传递事件呢?如果不传递就就会直接完成的这个的事件,如果继续传递,就到View控件中。然后会继续这个控件, 你会不会继续分发这个事件呢?如果View控件说,我不要这个事件,那么有问View控件,是否要直接杀死这个事件? 如果杀死(true),完成事件。如果不杀死就交给上层进行事件消费的,然后完成事件。

如果,View空间接受这个事件,则会开始处理,View控件先会问一下老大(onTouch)我可以不执行事件吗(想偷个懒)?老大说:不可以,就开始消费事件(onTouchEvent)。如果老大说:可以偷懒,那么就完成放弃了这个事件。

流程图:



  Android ViewGroup 的事件处理机制和View控件的很类似,不同的地方有:

    1, ViewGroup 有一个拦截的功能(onInterceptTouchEvent)函数,在调用完成分发函数后调用。如果返回的true 表示拦截此事件,事件将不会在继续向下分发事件。直接返回给上一层的Activity

    2,在子View中对事件进行消费后,ViewpGroup将接受不到任何事件。

1 0