1. dispatchTouchEvent :
功能:负责由上向下分发事件
false:表示该事件向下传递流程终结,将事件返回给上一级控件的 onTouchEvent 处理
true:表示该事件传递过程就此终结,事件被消费
super:调用父类的方法,表示该事件向下一级的 dispatchTouchEvent 传递
2.onInterceptTouchEvent :
功能:只有ViewGroup 才有这个方法,负责拦截事件
false,super:表示不拦截,事件向下一级的 dispatchTouchEvent 传递
true:表示事件被拦截,事件将由当前的 ViewGroup 的 onTouchEvent 处理
3.onTouchEvent :
功能:负责由下向上分发事件
false,super:表示事件向上一级控件的 dispatchTouchEvent 传递
true: 事件自己消费
4.onTouch :
功能:当view 或 ViewGroup 被触摸时调用
这个方法是在 dispatchTouchEvent 里面被调用的
4.onClick :
功能:当view 或 ViewGroup 被点击时调用
功能:负责由上向下分发事件
false:表示该事件向下传递流程终结,将事件返回给上一级控件的 onTouchEvent 处理
true:表示该事件传递过程就此终结,事件被消费
super:调用父类的方法,表示该事件向下一级的 dispatchTouchEvent 传递
2.onInterceptTouchEvent :
功能:只有ViewGroup 才有这个方法,负责拦截事件
false,super:表示不拦截,事件向下一级的 dispatchTouchEvent 传递
true:表示事件被拦截,事件将由当前的 ViewGroup 的 onTouchEvent 处理
3.onTouchEvent :
功能:负责由下向上分发事件
false,super:表示事件向上一级控件的 dispatchTouchEvent 传递
true: 事件自己消费
4.onTouch :
功能:当view 或 ViewGroup 被触摸时调用
这个方法是在 dispatchTouchEvent 里面被调用的
4.onClick :
功能:当view 或 ViewGroup 被点击时调用
这个方法是在 onTouchEvent 里面被调用的
解决滑动冲突:一般滑动冲突的原因都是因为嵌套导致的,例如 PullToRefreshListView 里面嵌套 ListView:
冲突的原因是因为 PullToRefreshListView 里面的 ListView 是继承 AbsListView的,而AbsListView 在他的 onInterceptTouchEvent() 方法里进行了某些动作的拦截,
解决方法:
listview.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.i("onTouch", "listview:" + event.getAction());
if (event.getAction() == MotionEvent.ACTION_UP) {
refreshListView.getRefreshableView().requestDisallowInterceptTouchEvent(false);
} else {//现获取 PullToRefreshListView 中的 ListView 然后设置不拦截
refreshListView.getRefreshableView().requestDisallowInterceptTouchEvent(true);
}
return false;
}
});
先暂时记下,以后整理
详细请参考:http://www.jianshu.com/p/e99b5e8bd67b#