面试:事件分发中,有哪些会发送cancel事件

1、父容器拦截了事件。

2、viewgroup移除当前view。

3、window移除当前view

如果ViewGroup拦截了Move事件,那么这个Move事件将会转化为Cancel事件传递给子view。

ACTION_CANCEL作用

我们知道如果某一个子View处理了Down事件,那么随之而来的Move和Up事件也会交给它处理。但是交给它处理之前,父View还是可以拦截事件的,如果拦截了事件,那么子View就会收到一个Cancel事件,并且不会收到后续的Move和Up事件。

FLAG_DISALLOW_INTERCEPT的作用

即使是MOVE和UP事件,在传递给子View之前也是可以通过ViewGroup的onInterceptTouchEvent方法拦截的,如果拦截了,那么该事件就会变成Cancel事件传递给子view。
那么是否有办法,子view不让ViewGroup拦截时间呢?

如果设置了FLAG_DISALLOW_INTERCEPT这个flag,那么ViewGoup则不会拦截Move和Up事件。

Guess you like

Origin blog.csdn.net/cpcpcp123/article/details/121862800