标签:
1. 触屏事件先传递给父容器的onInterceptTouchEvent方法(注:非容器没有onInterceptTouchEvent方法)
return true,事件被消费,此次事件与子控件无关,onInterceptTouchEvent会陆续接收到ACTION_MOVE,ACTION_UP事件
return false,事件优先传递给子控件处理
2. 子控件onTouchEvent接收到ACTION_DOWN事件,
return true 子控件消费事件,事件不向上回传,onTouchEvent会陆续接收到ACTION_MOVE,ACTION_UP事件
return false 子控件不处理,事件向上回传父控件,onTouchEvent不会接收到ACTION_MOVE,ACTION_UP事件
3. 父控件onTouchEvent接收到ACTION_DOWN事件后
return true 父控件消费事件,不再向上传递,onTouchEvent会陆续接收到ACTION_MOVE,ACTION_UP事件
return false 父控件不处理,事件向上回传父控件,onTouchEvent不会接收到ACTION_MOVE,ACTION_UP事件
4. 根据dispatchTouchEvent方法源码可知onTouchListener优先于onTouchEvent
总结:
1. 要让父控件处理触屏事件,必须满足:
只需要onInterceptTouchEvent方法return true;
若是有onTouchListener监听,onTouch方法必须返回false。
2. 要让子控件处理触屏事件,必须满足:
只需要父控件onInterceptTouchEvent方法默认return super.onInterceptTouchEvent(ev)或者直接return false,
子控件onTouchEvent方法 return true;
若是有onTouchListener监听,onTouch方法必须返回false。
标签:
原文地址:http://www.cnblogs.com/huangtianfu/p/5001946.html