在事件分发的过程中,用于Android特有的事件分发机制,可能出现两个问题:

  1. 子View在滑动过程中产生requestDisallowTouchEvent()导致父View没有办法拦截到事件的问题(父View没有回调onInterceptTouchEvent())。

  2. 父View拦截事件并消耗,此时达到某个临界值,父View不再需要事件,但是子View无法从ACTION_MOVE事件直接开始处理,所以导致子View只能从下次事件序列开始处理。

问题一解决

我们只需重写在父ViewGroup重写requestDisallowTouchEvent(),不调用super的同名方法,因为super会在此ViewGroup放上标记,导致子ViewGroup没法办法继续拦截事件

问题二解决

我们在当前ViewGroup中处理Touch事件达到临界值时,自行补发ACTION_UP和ACTION_DOWN事件,让事件传递流程重启,这样就不会出现子View需要在下次事件序列才能重启的问题了。

当然也可是使用NestScroll机制进行解决,NestScroll机制没有上述的两种问题。

解决两个问题后,可以较为流畅的处理手势。

发表评论

电子邮件地址不会被公开。 必填项已用*标注