Android ViewFlipper中的WebView无法获得滑动手势

Android ViewFlipper中的WebView无法获得滑动手势,android,android-layout,android-webview,viewflipper,Android,Android Layout,Android Webview,Viewflipper,我需要的:我需要在一个ViewFlipper中有不同的WebView,然后我想让手势在ViewFlipper上监听左右切换的滑动动作 我拥有的:我在ViewFlipper中添加了WebView,它们正在加载 问题是:当我想向左/向右滑动时,它不起作用,并且不会更改Web视图。当我用ImageViews测试同一个ViewFlipper和代码时,它工作得很好 ViewFlipper中的WebView会有什么问题?只需在活动中添加此代码即可 @Override public boolean disp

我需要的:我需要在一个ViewFlipper中有不同的WebView,然后我想让手势在ViewFlipper上监听左右切换的滑动动作

我拥有的:我在ViewFlipper中添加了WebView,它们正在加载

问题是:当我想向左/向右滑动时,它不起作用,并且不会更改Web视图。当我用ImageViews测试同一个ViewFlipper和代码时,它工作得很好


ViewFlipper中的WebView会有什么问题?

只需在活动中添加此代码即可

@Override
 public boolean dispatchTouchEvent(MotionEvent e)
 {
     super.dispatchTouchEvent(e);
     return gestureDetector.onTouchEvent(e);
 }

只需在您的活动中添加此代码

@Override
 public boolean dispatchTouchEvent(MotionEvent e)
 {
     super.dispatchTouchEvent(e);
     return gestureDetector.onTouchEvent(e);
 }

我也遇到了同样的问题,上面的问题对我不起作用,因为我的活动中有其他导航按钮,dispatchTouchEvent也覆盖了所有这些按钮。我最终分解并创建了一个自定义WebView,并使用它代替WebView

CustomWebView m_webview = new CustomWebView(this);
//normal webview code here
然后创建一个自定义webview来处理滑动

public class CustomWebView extends WebView
{
    private final int MINIMUM_HORIZONTAL_DISTANCE = 150;
    private final int MAXIMUM_VERTICAL_DISTANCE = 100;

    float downXValue, downYValue;
    private float lastTouchX, lastTouchY;
    private boolean hasMoved = false;

    public CustomWebView(Context context)
    {
        super(context);
    }

    @Override
    public boolean onTouchEvent(MotionEvent touchevent)
    {
        boolean consumed = super.onTouchEvent(touchevent);

        if (isClickable())
        {
            switch (touchevent.getAction())
            {
                case MotionEvent.ACTION_DOWN:
                    lastTouchX = touchevent.getX();
                    lastTouchY = touchevent.getY();
                    downXValue = touchevent.getX();
                    downYValue = touchevent.getY();
                    hasMoved = false;
                    break;
                case MotionEvent.ACTION_MOVE:
                    hasMoved = moved(touchevent);
                    break;
                case MotionEvent.ACTION_UP:
                    float currentX = touchevent.getX();
                    float currentY = touchevent.getY();
                    float X_difference = Math.abs(downXValue - currentX);
                    float Y_difference = Math.abs(downYValue - currentY);

                    /**
                    * Next WebView
                    */
                    if (lastTouchX < currentX && X_difference > MINIMUM_HORIZONTAL_DISTANCE && Y_difference < MAXIMUM_VERTICAL_DISTANCE)
                    {
                        //Your ViewFlipper Code here   viewFlipper.showNext();
                    }

                    /**
                    * Previous WebView
                    */
                    if (lastTouchX > currentX && X_difference > MINIMUM_HORIZONTAL_DISTANCE && Y_difference < MAXIMUM_VERTICAL_DISTANCE)
                    {
                        //Your ViewFlipper Code here   viewFlipper.showPrevious();
                    }
                    break;
            }
        }
        return consumed || isClickable();
    }

    private boolean moved(MotionEvent evt)
    {
        return hasMoved || Math.abs(evt.getX() - lastTouchX) > 10.0;
    }
}

我也遇到了同样的问题,上面的问题对我不起作用,因为我的活动中有其他导航按钮,dispatchTouchEvent也覆盖了所有这些按钮。我最终分解并创建了一个自定义WebView,并使用它代替WebView

CustomWebView m_webview = new CustomWebView(this);
//normal webview code here
然后创建一个自定义webview来处理滑动

public class CustomWebView extends WebView
{
    private final int MINIMUM_HORIZONTAL_DISTANCE = 150;
    private final int MAXIMUM_VERTICAL_DISTANCE = 100;

    float downXValue, downYValue;
    private float lastTouchX, lastTouchY;
    private boolean hasMoved = false;

    public CustomWebView(Context context)
    {
        super(context);
    }

    @Override
    public boolean onTouchEvent(MotionEvent touchevent)
    {
        boolean consumed = super.onTouchEvent(touchevent);

        if (isClickable())
        {
            switch (touchevent.getAction())
            {
                case MotionEvent.ACTION_DOWN:
                    lastTouchX = touchevent.getX();
                    lastTouchY = touchevent.getY();
                    downXValue = touchevent.getX();
                    downYValue = touchevent.getY();
                    hasMoved = false;
                    break;
                case MotionEvent.ACTION_MOVE:
                    hasMoved = moved(touchevent);
                    break;
                case MotionEvent.ACTION_UP:
                    float currentX = touchevent.getX();
                    float currentY = touchevent.getY();
                    float X_difference = Math.abs(downXValue - currentX);
                    float Y_difference = Math.abs(downYValue - currentY);

                    /**
                    * Next WebView
                    */
                    if (lastTouchX < currentX && X_difference > MINIMUM_HORIZONTAL_DISTANCE && Y_difference < MAXIMUM_VERTICAL_DISTANCE)
                    {
                        //Your ViewFlipper Code here   viewFlipper.showNext();
                    }

                    /**
                    * Previous WebView
                    */
                    if (lastTouchX > currentX && X_difference > MINIMUM_HORIZONTAL_DISTANCE && Y_difference < MAXIMUM_VERTICAL_DISTANCE)
                    {
                        //Your ViewFlipper Code here   viewFlipper.showPrevious();
                    }
                    break;
            }
        }
        return consumed || isClickable();
    }

    private boolean moved(MotionEvent evt)
    {
        return hasMoved || Math.abs(evt.getX() - lastTouchX) > 10.0;
    }
}

WebView有自己的姿态。除非覆盖webView的手势,否则不能在flipper中使用它。请检查此问题,需要帮助的webView有自己的手势。除非覆盖webView的手势,否则不能在flipper中使用它。请检查此问题,需要帮助