在Android开发中,当遇到在scrollview中嵌套webview的时候,或多或少会出现冲突的问题,因为scrollview 和webview都有滚动的功能,当html中有banner的时候,而此时正好banner要横向滚动,那么就会出现scrollview嵌套webview横向滚动冲突的问题。
当touch点放在webview上时,纵向滑动没任何问题,但横向滑动webview中的banner时,scrollview会出现纵向划动(斜滑)。
由于webview收到touch事件时,也会dispatch给父view(我的项目中为scrollview),导致父view也会interceptt ouch事件,并handle touch事件。
解决方案:在webview接收到touch事件后,禁止父view拦截touch事件。具体代码如下:
/** * 解决scrollview嵌套webview中HTML中banner横向滑动冲突的bug */ webView.setOnTouchListener(new View.OnTouchListener() { private float startx; private float starty; private float offsetx; private float offsety; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: v.getParent().requestDisallowInterceptTouchEvent(true); startx = event.getX(); starty = event.getY(); break; case MotionEvent.ACTION_MOVE: offsetx = Math.abs(event.getX() - startx); offsety = Math.abs(event.getY() - starty); if (offsetx > offsety) { v.getParent().requestDisallowInterceptTouchEvent(true); } else { v.getParent().requestDisallowInterceptTouchEvent(false); } break; default: break; } return false; } });亲测此方法可行。