在自定义控件中,也需要对于Touch事件的传递要有一定的理解,所以就去看了看这部分的内容
dispatchTouchEvent是一个入口
一个完整的Touch事件是从Down->(Move)->Up,
当发生了Touch事件中的Down的时候
Touch事件从Activity中的dispatchTouchEvent向下传递,传递到当前View/ViewGroup.
如果当前View 的dispatchTouchEvent返回为True的时候,那么当前View的dispatchTouchEvent会自己消费掉,同时停止向下传递
如果当前View 的dispatchTouchEvent返回为false的时候,那么当前View就会将Touch事件返回给上一层的ViewGroup/Activity中的
OnTouchEvent()
(下面返回默认的情况就是有可能会向下分发的情况,以上均不可能,都死在了dispatchTouchEvent或者返回上一层)
如果当前View的dispatchTouchEvent返回为默认的super.dispatchTouchEvent()的时候,那么就会将Touch事件分发给当前View的
onIntercepterTouchEvent方法,
如果当前View的onIntercepterTouchEvent()方法返回true,那么将会对该Touch事件进行拦截,会响应当前View的 OnTouchEvent()
如果当前View的onIntercepterTouchEvent() 方法返回位false,那么就会将该Touch事件向下一级的View的dispatchTouchEvent()分发(终于分发了.....也就是执行了上一步的一样操作接收到了分发)
如果当前View的onIntercepterTouchEvent()返回为默认的super.onIntercepterTouchEvent,那么将会对该Touch事件进行拦截,会响应当前View的 OnTouchEvent() 方法
而对于onTouchEvent()的调用(注意是调用),主要总结为,
1、在dispatchTouchEvent返回为false,才有可能返回上一层去触发onTouchEvent的响应,
2、在dispatchTouchEvent返回默认的时候,分发给自己的onIntercepterTouchEvent()方法,而onIntercepterTouchEvent方法返回为true的时候,将Touch事件拦截并交于onTouchEvent,而onIntercepterTouchEvent为默认时候,的同理亦是如此
3、这条最重要,以上onTouchEvent()都会响应,那么响应之后,
如果onTouchEvent返回为true的时候,那么onTouchEvent就自己消费掉该Touch事件
如果onTouchEvent返回为false的时候,那么onTouchEvent就会将该Touch事件传递给上一层的onTouchEvent().如果,上一层的View同样返回位false,那么该次事件将销毁掉,并且无法接受下次事件
如果onTouchEvent返回为默认的情况下,同false
如有错误,欢迎大家指正,共同学习~,进步~