所谓的普通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