Geste Détecteur ne fonctionne pas
Je a la suite de GestureListener:
public class BookListener extends SimpleOnGestureListener implements
OnTouchListener {
private LibraryActivity main;
private Book book;
private GestureDetector gesture;
public BookListener(Book book, LibraryActivity main) {
this.main = main;
this.book = book;
gesture = new GestureDetector(main,this);
}
public boolean onDoubleTap(MotionEvent e) {
main.showInfo(book);
return true;
}
public boolean onSingleTapConfirmed(MotionEvent e) {
main.openBook(book.getUrl());
return true;
}
public boolean onDown(MotionEvent evt){
return false;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
return gesture.onTouchEvent(event);
}
}
Je l'ajoute à mon avis, de cette manière:
view.setOnTouchListener(new BookListener(book, main));
Mais lors de l'exécution, les événements ne sont pas déclenchées, je debug, je vois la onDown est appelé, mais onSingleTapConfirmed ou onDoubleTap nevers œuvres.
Quel est le problème?
J'ai ce code fonctionne parfaitement avec:
private class GestureListener extends SimpleOnGestureListener {
private boolean newEvent = true;
@Override
public boolean onDoubleTap(MotionEvent e) {
document.rescale();
refreshImage();
return true;
}
public boolean onDown(MotionEvent evt){
newEvent = true;
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
if (!document.isScaled() && newEvent) {
Vector2D v = new Vector2D(e2).minus(new Vector2D(e1));
if (v.getX() > 60 || v.getX() < -60){
if (v.getX() < 0)
next();
else
previous();
newEvent = false;
}
} else {
img.notifyScroll(-distanceX, -distanceY);
img.invalidate();
}
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
switchSideBar();
return true;
}
}
- Merci marcos votre édité réponse m'a beaucoup aidé à résoudre le problème.
InformationsquelleAutor Marcos Vasconcelos | 2011-03-28
Vous devez vous connecter pour publier un commentaire.
onDown()
doit retournertrue
même si vous ne voulez pas à réagir à que événement, ou bien il va faire le détecteur de jeter toute la suite des événements, et donc de tout geste.Si vous n'utilisez
GestureDetector.OnGestureListener
, il est recommandé de mettre en œuvre unonDown()
méthode qui renvoie la valeur true. C'est parce que tous les gestes de commencer avec unonDown()
message. Si vous retourne la valeur false à partir deonDown()
, commeGestureDetector.SimpleOnGestureListener
le fait par défaut, le système suppose que vous voulez ignorer le reste de la geste, et les autres méthodes deGestureDetector.OnGestureListener
jamais appelée. Cela a le potentiel de causer des problèmes inattendus dans votre application. Le seul moment où vous devriez renvoyer false à partironDown()
est, si vous voulez vraiment ignorer un ensemble de geste.http://developer.android.com/training/gestures/detector.html#detect
Ce doit être appelé en premier.