记录下对Android事件分发的理解:spa
若是a做为viewgroup,b做为view,b包含在a中。事件会先传递到viewgroup中,既a。而后a会进行事件分发给子view。事件分发的方法中,会有个判断,是否要分发给子view,disallowintercept(是否禁用拦截事件) 和!onInterceptTouchEvent(ev)(是否拦截对子view的事件,取反),任何一个判断为true,则将事件分发给子view--b。子view中会有dispatchTouchEvent(),这个方法中,若是返回为true,表明消费这次事件。dispatchTouchEvent()中,有判断是否有ontouchlistener,是否可点击,ontouch()方法中是否返回了true,若是返回的是true,会不执行onTouchevent,click事件也在此方法中,设置的click事件也将不会执行。在ontouchevent中,也有判断是否返回true,表明消费事件。viewgroup若是没有分发事件给子view,或者子view没有消费事件,则会向本身的父级一层一层的找,既找到view中dispatchToiuchEvent,而后进行事件的判断。事件
主要是经过down事件,分发给子view,肯定谁消费这次事件,而后后面的move和up事件都有那个view负责。event