Android中的事件分发机制(一)

    xiaoxiao2021-03-25  87

    Activity或者View类中都有onTouchEvent回调方法,来接收touch事件。 一个完整的是从ACTION_DOWN开始,到ACTION_UP结束。 在简单的情况下,我们只需要在onTouchEvent中switch case语句,来处理三个动作(down,move,up)。 ViewGroup作为一个paraent是可以截获传向它的child的touch事件的。 那么,事件是如何传递的呢? 处理过程是按照Touch事件从上向下传递,再按照是否消费的返回值,从下向上返回,即如果View的onTouchEvent返回false,那么它将不消费事件,这个事件就交给它的上一级去消费,如果上一级也不消费,就再找上一级,这个过程最终会找到Activity,如果Activity也不消费,这个事件就消失了。 即 隧道式向下分发,然后 冒泡式向上处理。

    分析图如下:

    三个方法的作用: dispatchTouchEvent:用来事件分发,这个方法调用了 onIterceptTouchEvent和onTouchEvent方法,一般来说,这个方法不重写。 onIterceptTouchEvent:用于事件拦截,ViewGroup类中源代码的事件它返回false,表示不拦截事件,我们可以自己去写返回值来控制事件的分发。 onTouchEvent:用来事件处理,返回true代表这个view能处理该事件,事件将会终止向上传递,如果返回false,表示不能处理该事件,则把事件传递给这个事件的父View的onTouchEvent方法。

    转载请注明原文地址: https://ju.6miu.com/read-16484.html

    最新回复(0)