Android中ViewGroup到View的Touch事件的传递机制

  以前的时候开发Android,很多细节问题都不知道,最近有些空闲的事件,就来整理一些以前不是很明白的点,今天这是第一篇,就先从事件传递机制来看下

首先大家知道android可以自定义自己的UI,主要继承与ViewGroup和View,然而当我们要添加各种自定义事件的时候,就不可避免的要和onTouchEvent事件打交道,那么一个ViewGroup容器的touch事件和它所包含子View的touch事件两者之间有什么联系呢,下面我们就通过例子来解答心中的迷惑吧。

首先下面是自己画的一个简单的touch事件执行顺序图

Android中ViewGroup到View的Touch事件的传递机制

很明显,一个ViewGroup主要有onInterceptTouchEvent和onTouchEvent这两个事件,下面就解释一下这两个事件的意思

首先这两个事件都会返回一个boolean值,

先看onInterceptTouchEvent,从字面意思来看,这是拦截touchEvent的意思,换到程序里面就是 在触发onTouchEvent时,会先执行这个方法,通过例子我发现这个方法主要是针对容器中的子View来说的,如果返回true,表示当这个事件执行完毕后,不再执行里面包含子View的onTouchEvent事件,直接执行自己本身的onTouchEvent事件;如果返回false,表示要先执行子View里面的onTouchEvent事件,然后再看子View里面onTouchEvent的返回值情况,如果为true,整个touch事件就算执行完毕,如果false,表示还要继续执行容器里面的onTouchEvent事件。

其实上面已经将onTouchEvent事件说明了,如果返回true。表示整个touch事件就执行完了,不再再去执行父容器的onTouchEvent事件,相反,将会继续执行父容器的onTouchEvent, 所有的ViewGroup和View之间就是靠这样的方式传递事件.

 

 

 

你可能感兴趣的:(ViewGroup)