Android 事件冲突

单点的Down 事件

dispatchTouchEvent(MotionEvent ev)

来处理事件分发(View 只能消耗事件,走ontouchlister 和onclicklister)
onInterceptTouchEvent
来返回是否拦截,拦截的话就自己处理,不拦截继续分发;
点击之后无子view或者点击事件没有在子view 上,视为无子view处理


image.png

dispatchTransformedTouchEvent

onInterceptTouchEvent 为false时候,会调用此函数来循环分发,如果都没有人处理的话,由dispatchTouchEvent 自己处理相当于onInterceptTouchEvent=true
当某个子View 处理后,会生成一盒hand来告知上层ViewGropel有view 已经处理;下次也是单点事件也是有此view 处理


image.png

滑动事件

滑动事件不再做事件的分发,只有down事件来做分发;
正常流程:down 谁来处理move 事件谁就来处理
拦截流程:
父类拦截发法:比较简单,直接用onInterceptTouchEvent来做处理;
子类拦截法: 也是首先onInterceptTouchEvent来设置为false(down事件会重置初始值),
getParent().requestDisallowInterceptTouchEvent(true);来让设父viewGrop gorpflag 为true来接受不到是否拦截的的表达,失去拦截处理,最后落到子view的身上;

你可能感兴趣的:(Android 事件冲突)