Android滑动冲突解决方法
16lz
2021-01-23
dispatchTouchEvent(ev)伪代码:
public boolean dispatchTouchEvent(MotionEvent ev) {boolean consume = false;if (onInterceptTouchEvent(ev)) {onTouchEvent(ev);} else {child.dispatchTouchEvent(ev);}return consume;}
1.外部拦截法
重写父view的onIntercepTouchEvent():
@Override public boolean onInterceptTouchEvent(MotionEvent ev) { boolean intercept = false; int action = ev.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: intercept = false; break; case MotionEvent.ACTION_MOVE: if(父view需要处理事件) { intercept = true; } else { intercept = false; } break; case MotionEvent.ACTION_UP: intercept = false; break; } return intercept; }
2.内部拦截法
先重写父view的onInterceptTouchEvent方法。
@Override public boolean onInterceptTouchEvent(MotionEvent ev) { int action = ev.getAction(); if(action == MotionEvent.ACTION_DOWN) { return false; } else { return true; } }
再重写子view的diapatchTouchEvent()
@Override public boolean dispatchTouchEvent(MotionEvent ev) { ViewParent parent = getParent(); int action = ev.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: parent.requestDisallowInterceptTouchEvent(true); break; case MotionEvent.ACTION_MOVE: if(父view需要处理事件) { parent.requestDisallowInterceptTouchEvent(false); } break; case MotionEvent.ACTION_UP: break; } return super.dispatchTouchEvent(ev); }
更多相关文章
- Android 百度地图 对鼠标点击、移动、抬起三个事件的监听
- android实现事件监听的2种常用方式
- Android中点击事件之KeyListener实现步骤
- ListView的长按键事件的处理
- 自定义按钮实现android 返回按钮 事件
- android里面的点击事件总结
- android UI事件
- Android 之 事件