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

  • 时间:
  • 浏览:0
  • 来源:5分11选5_5分3D

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

图片来自 谷歌的小弟

整体流程:

三.相关知识点

View的事件下发机制,我我觉得假使 对MotionEvent事件的下发机制,即当一另一个多多MotionEvent产生了以前,系统需用把这一 事件传递给一另一个多多具体的View,这一 传递的过程假使 下发过程。

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

内部拦截法是指父容器不拦截任何事件,所有的事件都传递给子元素,假使 子元素需用此事件就直接消耗掉,假使 就交给父容器出理 。让子View调用requestDisallowInterceptTouchEvent( )禁止父View对Touch的拦截即可,曾经就能只能出理 滑动冲突的问题图片报告 。

整体流程:

四.滑动冲突的出理

一.View的事件下发机制

onTouch():View需用出理 事件时,假使 它设置了onTouchListener,只能onTouchListener中的onTouch最好的方法会被调用。假使 onTouch最好的方法返回false,只能View的onTouchEvent()最好的方法会被调用;假使 onTouch最好的方法返回true,只能View的onTouchEvent()最好的方法将无需被调用。onTouch()的优先级比onTouchEvent()的优先级更高。

3.某个View一旦日后开始出理 事件,假使 它不消耗ACTION_DOWN事件(onTouchEvent最好的方法返回了false),只能同一事件序列中的很多事件也有会交给它来出理 ,假使 事件将重新交给它的父元素出理 ,即父元素的onTouchEvent会被调用。

二.ViewGroup的事件下发机制

5.事件传递过程是由外向内的,即事件老是 先传递给父元素,假使 再由父元素下发给子View,通过requestDisallowInterceptTouchEvent最好的方法能只能在子元素中干预父元素的下发过程,假使 ACTION_DOWN事件除外。

dispatchTouchEvent():View事件下发的入口,返回值表示MotionEvent算是被消费。

2.某个View一旦决定拦截,只能这一 事件序列都只能由它来出理 (假使 事件序列有益于传递给它的话),假使 它的onInterceptTouchEvent()无需再被调用,这是假使 系统会将同一事件序列内的很多最好的方法都交给他出理 。

内部拦截法:父View中准确地进行事件下发和拦截

内部拦截法是指点击事件都先经过父容器拦截出理 ,假使 父容器需用此事件就拦截,假使 不需用就不拦截。我门歌词 歌词 能只能重写父View中与Touch事件下发相关的最好的方法—–onInterceptTouchEvent( )来进行出理 ,曾经就能只能出理 滑动冲突的问题图片报告 。

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

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

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

onTouchEvent最好的方法就会调用。

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

1.同一另一个多多事件序列是指从手指接触屏幕的那一刻起,到手指拖累屏幕的那一刻日后开始,在这一 过程中所产生的一系列事件,这一 事件序列以down事件日后开始,顶端所含不定量的move事件,最终以up事件日后开始。