您当前的位置: 首页 >  面试
  • 0浏览

    0关注

    674博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

沙漠一只雕得儿得儿 发布时间:2021-12-10 18:48:54 ,浏览量:0

结论

当某个 view 一直在处理事件,如果事件流没有中断,但是后续触摸事件,不再由它处理了,那么这个 view 就会收到一个 action_cancel

触发时机:

1)手机触摸在某个子 view,并且 down 也由它消耗,然后慢慢将手指移出该 view 的边界。

2)down 事件由手指触摸的子 view 消耗,但是后续的 move,因为一些条件设置被父 View 拦截了。后续事件不再由该子 view 处理

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

例如:最常见的是类似于 scrollview 这种可滚动控件中,如果是手指按下操作后继续滑动,会对之前点中的子控件发送一个 cancel 事件

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事件。

关注
打赏
1657159701
查看更多评论
立即登录/注册

微信扫码登录

0.0388s