android scrollview嵌套webview滑动冲突问题

scrollview嵌套webview中遇到的一些问题

背景:最近写的一个项目,同一页面会结合原生+H5,需要用scrollview+webview。

问题1:当touch点放在webview上时,纵向滑动没任何问题,但横向滑动webview中的banner时,scrollview会出现纵向划动(斜滑)。
分析:由于webview收到touch事件时,也会dispatch给父view(我的项目中为scrollview),导致父view也会interceptt ouch事件,并handle touch事件。
解决方案:在webview接收到touch事件后,禁止父view拦截touch事件。具体代码如下:
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;
            }
        });


问题2:webview在首次接收到touch事件以后,第二次无法接收到touch事件(android 4.4后)。
分析:4.4后webview的一个bug,在StackOverflow上搜集到了答案:Android WebView - onTouchListener stop working after scrolling page
解决方案:disable webview setting builtInZoomControls with "true"。


你可能感兴趣的:(android)