ACTION_CANCEL事件是怎么产生的?当滑出子View区域时会产生该事件吗?

0.讨论的前提

基于api 29源码的Viewgroup分析,自定义View重写dispatchTouchEvent()方法的话也是可以自己随便生成ACTION_CANCEL事件的。

1.先说结论,如下几种情况会产生ACTION_CANCEL事件

  1. 在子View处理事件的过程中,父View对事件拦截
  2. 子View被设置了PFLAG_CANCEL_NEXT_UP_EVENT标记时
  3. 在子View处理事件的过程中被从父View中移除时
  4. 当View从Window中分离时

2.对应结论所在源码位置

1. 在Viewgroup源码中通过搜索ACTION_CANCEL出现的位置共有9处,出现在以下几个方法中,其中后四个只是在注释中
第一个出现在dispatchTouchEvent()方法中

第二个出现在cancelAndClearTouchTargets()方法中,在该方法中会调用cancel出现的第四个方法

第三个出现在cancelTouchTarget()

第四五个出现在dispatchTransformedTouchEvent()中
2. 结论1源码分析
3.结论2源码分析
4.结论3源码分析
5.结论4源码分析

3. 最后,如上,滑出子View区域时,并不会产生Cancel事件,而且还会继续接收后续的move,up等事件

你可能感兴趣的:(ACTION_CANCEL事件是怎么产生的?当滑出子View区域时会产生该事件吗?)