Android自定义View探索(三)—事件分发机制与滑动冲突处理

  • 时间:
  • 浏览:3
  • 来源:彩神大发UU直播现场_神彩大发UU直播现场官方

2.某个View一旦决定拦截,这麼你你这一 事件序列都才能由它来避免(可能性事件序列才能传递给它得话),怎么让它的onInterceptTouchEvent()不要再再被调用,这是可能性系统会将同一事件序列内的很多最好的办法 都交给他避免。

onTouch():View还要避免事件时,可能性它设置了onTouchListener,这麼onTouchListener中的onTouch最好的办法 会被调用。可能性onTouch最好的办法 返回false,这麼View的onTouchEvent()最好的办法 会被调用;可能性onTouch最好的办法 返回true,这麼View的onTouchEvent()最好的办法 将不要再被调用。onTouch()的优先级比onTouchEvent()的优先级更高。

当有一一个多 点击事件产生前一天,它的传递过程遵循如下顺序:Activity—>Window—>外层ViewGroup。 外层ViewGroup接收到事件前一天,就会按照事件分类分类整理机制去分类分类整理事件。可能性你你这一 ViewGroup的onInterceptTouchEvent()最好的办法 返回true,就表示它要拦截当前事件,接着事件就会交给你你这一 ViewGroup来避免;可能性你你这一 ViewGroup的onInterceptTouchEvent()最好的办法 返回false,就表示它不拦截当前事件,接着事件就会交给它的子元素来避免。可能性有一一个多 View的onTouchEvent()返回false,这麼它的父容器的onTouchEvent()就会被调用。以此类推,可能性所有的元素全是避免你你这一 事件,这麼你你这一 事件最终会传递给Activity避免,即Activity的onTouchEvent()最好的办法 会调用。

1.同有一一个多 事件序列是指从手指接触屏幕的那一刻起,到手指离开屏幕的那一刻现在始于,在你你这一 过程中所产生的一系列事件,你你这一 事件序列以down事件现在始于,上边含有不定量的move事件,最终以up事件现在始于。

內部拦截法:父View中准确地进行事件分类分类整理和拦截

內部拦截法是指点击事件都先经过父容器拦截避免,可能性父容器还要此事件就拦截,可能性不还要就不拦截。很多人儿可以 重写父View中与Touch事件分类分类整理相关的最好的办法 —–onInterceptTouchEvent( )来进行避免,假使 就可以 避免滑动冲突的什么的问题。

整体流程:

4.ViewGroup默认不拦截任何事件,即默认onInterceptTouchEvent返回false。View这麼onInterceptTouchEvent最好的办法 ,一旦有事件传递给它,它的

onTouchEvent最好的办法 就会调用。

5.事件传递过程是由外向内的,即事件老会 先传递给父元素,怎么让再由父元素分类分类整理给子View,通过requestDisallowInterceptTouchEvent最好的办法 可以 在子元素中干预父元素的分类分类整理过程,怎么让ACTION_DOWN事件除外。

一.View的事件分类分类整理机制

onClick() : View的onTouchEvent()的优先级比onClick()高,用于避免clickListener设置的点击事件。

二.ViewGroup的事件分类分类整理机制

View的事件分类分类整理机制,虽然假使 对MotionEvent事件的分类分类整理机制,即当有一一个多 MotionEvent产生了前一天,系统还要把你你这一 事件传递给有一一个多 具体的View,你你这一 传递的过程假使 分类分类整理过程。

四.滑动冲突的避免

整体流程:

图片来自 谷歌的小弟

內部拦截法:子View禁止父View拦截Touch事件

內部拦截法是指父容器不拦截任何事件,所有的事件都传递给子元素,可能性子元素还要此事件就直接消耗掉,怎么让就交给父容器避免。让子View调用requestDisallowInterceptTouchEvent( )禁止父View对Touch的拦截即可,假使 就可以 避免滑动冲突的什么的问题。

三.相关知识点

onTouchEvent():View自身对于Touch避免的实现 ,返回结果表示是是是否是是消耗当前事件。

dispatchTouchEvent()—>onTouch()—>onTouchEvent()—>onClick()

dispatchTouchEvent():View事件分类分类整理的入口,返回值表示MotionEvent是是是否是是被消费。

3.某个View一旦现在始于避免事件,可能性它不消耗ACTION_DOWN事件(onTouchEvent最好的办法 返回了false),这麼同一事件序列中的很多事件全是会交给它来避免,怎么让事件将重新交给它的父元素避免,即父元素的onTouchEvent会被调用。