2012-04-03 7 views
1

Was ich brauche: Ich muss verschiedene WebViews in einem ViewFlipper haben und dann möchte ich GestenListen auf ViewFlipper für Swipe-Aktionen auf Left Right Switching haben.WebView in ViewFlipper nicht wischen Gesten

Was ich habe: Ich habe WebViews in ViewFlipper hinzugefügt und sie werden geladen.

Was ist das Problem: Wenn ich nach links/rechts streichen will, funktioniert es nicht und WebViews werden nicht geändert. Wenn ich den gleichen ViewFlipper und Code mit ImageViews teste, funktioniert es gut.

Was kann das Problem mit WebViews in ViewFlipper sein?

+0

WebView zu handhaben klauen seine eigene Gesten hat. Sie können es nicht mit Gesten in einem Flipper verwenden, es sei denn, Sie überschreiben die Gesten des WebView –

Antwort

4

Fügen Sie einfach diesen Code auf Ihrer Aktivität

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

ich das gleiche Problem hatte, und die oben nicht für mich arbeiten, weil ich in meiner Tätigkeit andere Navigationstasten hatte, und die dispatchTouchEvent overrode alle von ihnen als Gut. Ich brach schließlich ab und erstellt eine benutzerdefinierte WebView und verwendet es anstelle von WebView

CustomWebView m_webview = new CustomWebView(this); 
//normal webview code here 

Dann eine benutzerdefinierte webview erstellen

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; 
    } 
}