Android ViewGroup中事件触发和传递机制( 二 )


于是我们首先想到,要保证flip手势检测,需要把所有的Touch Event都传到上层去 。
然而在分发逻辑之外还有一个逻辑,估计是为了保证每个触操作只能由一个View来进行完整响应,对事件有个额外的逻辑:如果某个View在处理事件时返回false(即该View未处理此事件),那么后续产生的其它事件将直接忽略掉这个View(不过又有另外的独立逻辑) 。举例来说就是,如果你处理时返回了false,那么你这个View将得不到或等等这些后续事件了 。
于是难题出现了,你若把Touch Event都想办法给传到上层了(只能通过返回false来传到上层),那么下层的各种子View就不能处理后续事件了 。
解决方案:
开始仅着眼于Touch Event处理完后的回传过程,想了N久不得,毕竟我想实现的是一个需要打破事件处理逻辑的效果(就是一个连续性操作,只有不满足上层要求时,才轮到下层处理) 。然后突然想到事件的分发过程,便豁然开朗:
覆写最上层的View的函数,代码如下:
@
( event) {
【Android ViewGroup中事件触发和传递机制】if (.(event)) {
event.(.);
super.(event);
于是效果实现 。也就是在分发之前便进行手势检测处理,若检测成功,则取消下层的一切处理过程 。
总结一下就是:t可以接受到所有的Touch事件,而则不一定 。