dispatchTouchEvent与onTouchEvent

事件指的是触摸事件,分发,为什么要分发呢,就像你给自己的外甥发红包一样,这样也叫分发,那么这样就有viewgroup,viewgroup里面有子view,ViewGroup的相关事件有三个:onInterceptTouchEvent、dispatchTouchEvent、onTouchEvent。View的相关事件只有两个:dispatchTouchEvent、onTouchEvent。

简单的来说就是viewgroup遍历自己的子view,如果子view中有viewgroup,就继续遍历这个viewgroup的子view,都是调用的dispatchTouchEvent来分发事件,dispatchTouchEvent会返回一个布尔值类型的参数,事件会一直分开,一直在某个view调用dispatchTouchEvent返回true,表示事件分发到此结束,返回true的这个view就是需要接受这个事件的view,

ViewGroup的dispatchTouchEvent是真正在执行“分发”工作,而View的dispatchTouchEvent方法,并不执行分发工作,或者说它分发的对象就是自己,决定是否把touch事件交给自己处理,而处理的方法,便是onTouchEvent事件,这里说到了view的onTouchEvent事件是这个时候开始执行,那么viewgroup的onTouchEvent什么时候执行呢?,当所有的子view调用dispatchTouchEvent都是返回false的时候,这个时候viewgroup的onTouchEvent就会执行

事实上,一次完整的Touch事件,应该是由一个Down、一个Up和若干个Move组成的

但是dispatchTouchEvent只是分发了Down事件,只有返回true的时候,证明这个view需要 这个事件,然后在继续分发Up和Move事件给它

推荐阅读更多精彩内容