1、事件分发,由父到子,及Activity->ViewGroup->View,
三个函数: dispatchTouchEvent, onInterruptEvent(ViewGroup持有), onTouchEvent
2、手指按下事件down,系统代码执行过程;
1、调用Activity.dispatchTouchEvent
2、默认情况下再去调用root ViewGroup.dispatchTouchEvent
3、再去遍历root ViewGroup逐步匹配view,看事件是否被消费,及看View.dispatchTouchEvent是否返回true,如果返回true,那么就被消费
4、调用view.dispatchTouchEvent,先判断是否有设置touchListener事件,如果有,就调用TouchListener的onTouch方法,
1、onTouch方法返回false,表示还未消费完事件,继续往下调用view.onTouchEvent方法
1.1 该view没有设置clickable或者点击事件,那么事件继续回传给父类的onTouchEvent执行
1.2如果有设置了clickable或者点击事件,那么该事件消费完毕
2、onTouch方法返回true,表示已消费完事件,事件传递结束
5、因此如果有设置,那么onTouch肯定先于onTouchEvent执行
网友评论