android中TouchEvent事件传递之普通view之间

所谓的普通view就是ViewGroup继承LinearLayout,view继承TextView,有人说那么,button咋么办,下次再研究,这一阶段就看普通的就够了


ok下面说说我的研究结果

首先是view结构,可能画得不太对,不过大致还是能理解





好,接下来情景分析

情景 1.


所有返回都是默认(子view没有clickable等属性,默认返回为false)触摸viewgroupTwo


事件传递:在down事件中确定事件归属,发现不属于素有子view,那么由自己
Activity               dispatchTouchEvent
ViewGroupTwo   dispatchTouchevent 
viewFour  dispatchTouchEvent
 viewFour                         onTouchEvent
ViewGroupTwo  onTouchEvent
Activity                              onTouchEvent
然后move和up事件只在Activity中传递,经历dispatchTouchEvent onTouchEvent
Down事件确定了事件的归属为activity,然后剩下的事件就只在activity中传递了




由down事件先确认没有view返回true,那么,就表示该事件不属于view,那么其余事件这些view就没有资格处理,

那么这些事件套(down move up)就由activity处理




情景 2。


所有返回都是默认(子view没有clickable等属性,更改viewFour返回值为true)


事件传递:在down事件中确定事件归属,发现不属于素有子view,那么由自己
Activity               dispatchTouchEvent
ViewGroupTwo   dispatchTouchevent 
viewFour  dispatchTouchEvent
 viewFour                        onTouchEvent(原来要交给你处理,那这件事父辈们就不管了)
//ViewGroupTwo  onTouchEvent(不执行)
//Activity                              onTouchEvent(不执行)
然后move和up事件也经历上面的过程
Down事件确定了事件的归属为viewFour ,move和up事件由activity一步一步分给viewFour





如果有view返回了true,那么表示,这个事件就由这个view来处理了,由activity分给子viewgroup,子viewgroup分给孙子viewgroup



情景 3。

如果,down返回了true,而move和up返回了false怎么办

首先down确定了该事件套属于该view,然后move和up的时候,返回了false表示自己处理不了了,就由activity处理。

(ps:我总觉得这里不对,按我的想法应该是层层上传才对,看来要去研究下源码才行)




总结


Down事件 :确认事件套(down move up)属于谁,ontouch中返回true则表示自己有能力处理,返回false表示自己没有能力处理
有能力处理,则会层层下发,直到自己
所有view都没能力处理,则会由activity处理


Move,up:如果在down中确认了该事件本来是有能力处理的,但是move和up自己处理不了(返回false),也会先层层下发,谁让之前就说了自己能够处理呢,然后发现自己处理不了,交给activity处理


至于onInterceptTouchEvent
onInterceptTouchEvent:返回true表示,不用问我的儿子了,我能够担下来,我可以解决它,那么事件不往下传递,由自己的ontouchEvent处理,至于onTouchEvent中的down,move ,up的返回值,同上


可以看出 onInterceptTouchEvent  也是为了确认事件归属的,那么只在down事件中被调用一次,事件归属确认完毕,就不会再调用了


一个demo而已,如果各位不嫌麻烦可以自己写,不会费太多功夫

http://download.csdn.net/detail/u013818990/8652555


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值