由于onInterceptTouchEvent()的机制比较复杂,上面的说明写的也比较复杂,总结一下,基本的规则是:
1. down事件首先会传递到onInterceptTouchEvent()方法
2. 如果该ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后return false,内部view将也会获取到down,那么后续的move, up等事件将继续会先传递给该ViewGroup,之后一样传递给最终的目标view的onTouchEvent()处理。
3. 如果该ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后return true,内部view不会货到down,后续的move, up等事件也不再传递给onInterceptTouchEvent(),当然,move,up也不会传给view
4. 如果最终需要处理事件的view的onTouchEvent()返回了false,那么该事件将被传递至其上一层次的view的onTouchEvent()处理。
5. 如果最终需要处理事件的view 的onTouchEvent()返回了true,那么后续事件将可以继续传递给该view的onTouchEvent()处理。
6. group的touch和这个机制没关系,与上一级有关系。
所以总结一下几点
1,group为false ,view为false ,的情况,touch每次都会从group到view ,view设了false(说明他不想处理了),但是group是false,就不得不把touch每次都给view,所以view每次都被强迫接受一次touch(down,up,move中的一个);
2,group 为true ,view 是什么都无所谓了,人家group根本就不给你touch。当然,如果你想的到一次的话,你可以在group的onInterceptTouchEvent中加上View view = findViewById(id);view.dispatchTouchEvent(event); 来触发view仅有的一次touch;
3,group 为false,view为true,的情况,跟第一种基本一样,第一种的view每次都被强迫,跟他自己接受没什么区别,所以几乎一样。