记录下对Android事件分发的理解:

如果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负责。

04-23 05:45