Android滑动冲突解决方法
16lz
2022-05-27
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(安卓)应用程序运行shell命令
- android java 执行shell命令(笔记)
- [Android] Service和广播联合更新UI
- Android(安卓)Webview与Html5交互
- Android之ListView与自定义adapter简单实例
- Android(安卓)Studio学习:中级控件:使用Intent进行页面之间数据传
- Android在onCreate()中获得控件尺寸
- Android(安卓)ViewPager中嵌套Banner 导致水平滑动冲突
- Android三种实现定时器的方法