Android: la détection de fling gestes
Dans mon application, j'ai essayer de capturer un fling événement sur une vue (un ScrollView
pour être exact, mais essayé avec LinearLayout
ainsi).
Par définition de points d'arrêt, je peux voir que le MotionEvents
se produise correctement jusqu'au point où la onFling()
doit se déclencher.
Le flux d'événements est comme suit:
- La vue
onTouchEvent
- La
OnGestureListener's onDown
- La
OnGestureListener's onShowPress
- La
OnGestureListener's onLongPress
Je suis à une perte sur la façon d'aller sur la tentative de déboguer quelque chose comme ça et de recherche de Google ne s'est pas beaucoup. Les pointeurs ?
J'ai également joindre la fenêtre concernée qui doit gérer les gestes:
import android.content.Context;
import android.content.Intent;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.ScrollView;
public class GestureScrollView extends ScrollView {
private static int MAJOR_MOVE = 60;
private GestureDetector gd;
public GestureScrollView(final Context context) {
super(context);
gd = new GestureDetector(context,
new GestureDetector.OnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
//TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent e) {
//TODO Auto-generated method stub
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
//TODO Auto-generated method stub
return false;
}
@Override
public void onLongPress(MotionEvent e) {
//TODO Auto-generated method stub
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
int dx = (int) (e2.getX() - e1.getX());
if (Math.abs(dx) > MAJOR_MOVE
&& Math.abs(velocityX) > Math.abs(velocityY)) {
if (velocityX < 0) {
Intent intent = new Intent(context, Main.class);
context.startActivity(intent);
}
}
return false;
}
@Override
public boolean onDown(MotionEvent e) {
//TODO Auto-generated method stub
return false;
}
});
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return gd.onTouchEvent(event);
}
}
OriginalL'auteur javito | 2009-12-15
Vous devez vous connecter pour publier un commentaire.
Prendre la MotionEvent de l'Activité et non pas à partir de votre point de Vue. Lorsque votre Geste détecteur est basé sur MotionEvent qui vient de l'Activité, vous obtiendrez la onFling événement. Donc, vous avez à déplacer onTouchEvent() de votre GestureScrollView à votre classe d'Activité.
Ce qui concerne les!
ne pouvez-vous pas vous poster le code est correct, comme réponse, s'il vous plaît - type d'un cas délicat qui n'est pas bien documenté
sur votre question pour comprendre ça. Il m'a aidé à voler des événements de ma défilement de la vue ainsi
OriginalL'auteur Ramps