ListView嵌套webView 事件冲突解决

如图,红色部分为WebView,作为ListView头部存在,测试视频(h5)要左右滑动,ListView要上下滑动,保证视频控件和下面评论部分可以显示,但是这个时候就存在WebView横向滑动和ListView竖向滑动之间的冲突。

解决如下:

    mWebView.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                //在触发时回去到起始坐标
                float x = event.getX();
                float y = event.getY();
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        //将按下时的坐标存储
                        downX = x;
                        downY = y;
                        break;
                    case MotionEvent.ACTION_MOVE:

                        //获取到距离差
                        float dx = x - downX;
                        float dy = y - downY;
                        //防止是按下也判断
                        if (Math.abs(dx) > 8 && Math.abs(dy) > 8) {
                            //通过距离差判断方向
                            int orientation = getOrientation(dx, dy);
                            switch (orientation) {
                                case 'r':
                                    action = "右";
                                    listView.requestDisallowInterceptTouchEvent(true);
                                    break;
                                case 'l':
                                    action = "左";
                                    listView.requestDisallowInterceptTouchEvent(true);
                                    break;
                                case 't':
                                    action = "上";

                                    break;
                                case 'b':
                                    action = "下";

                                    break;
                            }
                        }
                        break;
                    case MotionEvent.ACTION_CANCEL:
                    case MotionEvent.ACTION_UP:
                        listView.requestDisallowInterceptTouchEvent(false);
                        break;
                }
                return false;
            }
        });
 /**
     * 根据距离差判断 滑动方向
     *
     * @param dx X轴的距离差
     * @param dy Y轴的距离差
     * @return 滑动的方向
     */
    private int getOrientation(float dx, float dy) {
        if (Math.abs(dx) > Math.abs(dy)) {
            //X轴移动
            return dx > 0 ? 'r' : 'l';
        } else {
            //Y轴移动
            return dy > 0 ? 'b' : 't';
        }
    }

完美解决,横向 H5滑动不受到影响,竖向滑动也不会受到影响。

 

posted @ 2017-03-29 16:27  西北野狼  阅读(2412)  评论(0编辑  收藏  举报