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了
  • 如果某个View复写了onTouchEvent,又在外部为这个View setOnTouchListener,那么调用顺序是,在这个View的dispatchTouchEvent中先判断通过setOnTouchListener传进去的listener的onTouch方法是否return true,如果是的话onTouchEvent中的onTouch将不会得到执行,否的话,才执行onTouchEvent中的onTouch
Share

You may also like...

发表回复

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