ListView嵌套webView 事件衝突解決

如圖,紅色部分爲WebView,做爲ListView頭部存在,測試視頻(h5)要左右滑動,ListView要上下滑動,保證視頻控件和下面評論部分能夠顯示,可是這個時候就存在WebView橫向滑動和ListView豎向滑動之間的衝突。ide

解決以下:測試

    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滑動不受到影響,豎向滑動也不會受到影響。spa

相關文章
相關標籤/搜索