Comment détecter un geste de balayage sur webview

je suis l'élaboration d'une simple application android avec une RelativeLayout et un WebView à l'intérieur.

J'ai pour détecter faites glisser le doigt de bas en haut faire que dans les 20% de la partie gauche de l'écran. Ainsi, lorsque l'utilisateur de glisser dans l'espace du bas vers le haut, je dois afficher une boîte de dialogue personnaliser.

Ce que je cherche est:

import android.app.Activity;
import android.view.MotionEvent;
import android.view.View;

public class ActivitySwipeDetector implements View.OnTouchListener {

    static final String logTag = "ActivitySwipeDetector";
    private Activity activity;
    static final int MIN_DISTANCE = 100;
    private float downY, upY;

    public ActivitySwipeDetector(Activity activity){
        this.activity = activity;
    }

    public void onRightToLeftSwipe(){

    }

    public void onLeftToRightSwipe(){

    }

    public void onTopToBottomSwipe(){

    }

    public void onBottomToTopSwipe(){
        System.out.println("BOTTOM TO TOP SWIPE DONE!");
    }

    public boolean onTouch(View v, MotionEvent event) {
        switch(event.getAction()){
        case MotionEvent.ACTION_DOWN: {
            downY = event.getY();
            return true;
        }
        case MotionEvent.ACTION_UP: {
            upY = event.getY();
            float deltaY = downY - upY;
            if(Math.abs(deltaY) > MIN_DISTANCE){
                if(deltaY > 0) { this.onBottomToTopSwipe(); return true; }
            }
            else {
                return false;
            }

            return true;
        }
        }
        return false;
    }

}

    layout = (RelativeLayout)this.findViewById(R.id.layout);
    layout.setOnTouchListener(activitySwipeDetector);

Mais il ne fait rien!

Donc j'ai essayer de créer un personnalisé webview de cette façon:

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.webkit.WebView;
public class MyWebView extends WebView {
public MyWebView(Context context) {
super(context);
}
public MyWebView(Context context,AttributeSet set){
super(context,set);
}
@Override 
public boolean onTouchEvent(MotionEvent evt) {   
boolean consumed = super.onTouchEvent(evt); 
if (isClickable()) { 
switch (evt.getAction()) { 
case MotionEvent.ACTION_DOWN:  
lastTouchY = evt.getY();
downTime = evt.getEventTime();
hasMoved = false; 
break; 
case MotionEvent.ACTION_MOVE: 
hasMoved = moved(evt); 
break; 
case MotionEvent.ACTION_UP: 
float actualTouchY = evt.getY();
long currentTime = evt.getEventTime();
float difference = Math.abs(lastTouchY - actualTouchY);
long time = currentTime - downTime;
if ( (lastTouchY < actualTouchY) && (time < 220) && (difference > 100) ) {
System.out.println("SWIPE1");
}
if ( (lastTouchY > actualTouchY) && (time < 220) && (difference > 100) ) {
System.out.println("SWIPE2");
}
break; 
} 
} 
return consumed || isClickable(); 
} 
long downTime;
private float lastTouchY; 
private boolean hasMoved = false; 
private boolean moved(MotionEvent evt) { 
return hasMoved || 
Math.abs(evt.getY() - lastTouchY) > 10.0; 
}
}

mais sans succès!!! quelqu'un peut-il m'aider?? Merci!!!!! 🙂

OriginalL'auteur JackTurky | 2012-09-25