Android手势传递一般过程及其规则研究

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ljzdyh/article/details/52911032

1.手势传递一般过程

Android 手势传递通过dispatchTouchEvent 、onInterceptTouchEvent(ViewGroup特有)、onTouchEvent
View手势过程传递为  dispatchTouchEvent   ----》》onInterceptTouchEvent ----》》onTouchEvent
多嵌套手势传递过程为如图所示   ParentView 包含 SonView 包含 ChildView

手势传递过程由最外层 父view 往最内层 子View 传递,view内部执行拦截检验 dispatch 和 intercept,返回false(不拦截处理)的时候,view继续将手势往下传递,直到到达最内层子view后,由子view执行onTouch事件,如果子view不做处理返回false,则向上级父类传递,执行父类onTouch事件。

2.手势 拦截处理

2.1 Android 基础手势为 ACTION_DOWN , ACTION_MOVE,  ACTION_UP 

ANCTION_MOVE,ACTION_UP以ACTION_DOWN是否做处理而出现,即拦截ACTION_DOWN后,才依次出现ACTION_MOVE,ACTION_UP.

2.2 onInterceptTouchEvent 拦截处理对象为View, dispatchTouchEvent和onTouchEvent 则面对传递过程。

onInterceptTouchEvent ACTION_DOWN 返回true,手势不会向ChildView传递,而是执行son的onTouch事件,然后继续向上级传递。





dispatchTouchEvent  ACTION_DOWN 返回true,因为dispatch是对过程进行拦截,并且告诉系统,此处需要进行手势处理,不需要再进行手势传递,所以,系统直接进行下个手势的传递。同理 onTouchEvent 也是如此





前面说过,手势的传递开始于ACTION_DOWN,当系统接收到手势拦截的反馈之后,才会将ACTIOIN_MOVE,ACTION_UP传递出来,并且确认拦截的当前View中的 onInterceptTouchEvent 不再执行。


所以,个人觉得,做手势拦截和解决手势冲突问题,要明确手势传递的过程还有其本身处理规则,我认为做拦截,先是在Intercept处确定拦截规则,在把具体实现放在touch中。

猜你喜欢

转载自blog.csdn.net/ljzdyh/article/details/52911032