请问为什么要在ACTION_DOWN返回true
请问为什么要在ACTION_DOWN返回true,听老师说是把触摸事件传递到自己本省并处理,可这个怎么理解,因为我还没去了解Android控件的事件分发机制
请问为什么要在ACTION_DOWN返回true,听老师说是把触摸事件传递到自己本省并处理,可这个怎么理解,因为我还没去了解Android控件的事件分发机制
2017-01-19
首先事件指的是触摸事件,分发,为什么要分发呢,就像你给自己的外甥发红包一样,这样也叫分发,那么这样就有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事件给它
举报