Android触摸事件传递

  • dispatchTouchEvent 是任何ViewGroup或者View都始终会被调用的,不管有没有在onInterceptTouchEvent中被拦截
  • ViewGroup可以通过复写onInterceptTouchEvent(ev)方法,通过return true,拦截子View的事件,把事件交给自己处理,接着会执行ViewGroup自己的onTouchEvent方法
  • 如果ViewGroup中的onInterceptTouchEvent没有拦截触摸事件,而子View中有能够处理该事件的View,即子View的onTouchEvent return true,则直接交给子View处理,ViewGroup的onTouchEvent不会被触发
  • 子View可以通过在dispatchTouchEvent中调用getParent().requestDisallowInterceptTouchEvent(true); 阻止ViewGroup对其MOVE或者UP事件进行拦截
  • 如果在ViewGroup的onInterceptTouchEvent的DOWN中return true ,则DOWN,MOVE,UP子View都不会捕获事件,ViewGroup自身的onInterceptTouchEvent也不会再回调DOWN,MOVE,UP事件,而是直接交给ViewGroup的onTouchEvent了
  • 如果在ViewGroup的onInterceptTouchEvent的MOVE中return true , 则MOVE和UP子View都不会捕获事件,ViewGroup自身的onInterceptTouchEvent也不会再回调MOVE,UP事件,而是直接交给ViewGroup的onTouchEvent了
Share

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注