Geste-Detektor funktioniert nicht
Ich hat die folgenden 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);
}
}
Ich hinzufügen, dass es meiner Ansicht auf diese Weise:
view.setOnTouchListener(new BookListener(book, main));
Aber, wenn ausgeführt wird, werden die Ereignisse nicht ausgelöst, ich Debuggen, sehe ich die onDown genannt wird, aber onSingleTapConfirmed oder onDoubleTap nevers funktioniert.
Was ist falsch?
Ich hat den code perfekt funktioniert:
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;
}
}
- Danke marcos bearbeitet Ihre Antwort hat mir sehr geholfen, das Problem zu lösen.
InformationsquelleAutor Marcos Vasconcelos | 2011-03-28
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
onDown()
muss zurücktrue
auch wenn Sie nicht wollen, um reagieren zu , dass Veranstaltung, oder aber es wird der Detektor verwerfen folgende Ereignis und daher ist jede Geste.Ob oder nicht Sie verwenden
GestureDetector.OnGestureListener
, es ist best practice zur Implementierung einesonDown()
Methode, die true zurückgibt. Dies ist, weil alle gesten beginnen mit einemonDown()
Nachricht. Wenn Sie false zurück ausonDown()
alsGestureDetector.SimpleOnGestureListener
standardmäßig tut, geht das system davon aus, dass Sie möchten, ignorieren Sie den rest der Geste, und die anderen Methoden derGestureDetector.OnGestureListener
nie aufgerufen werden. Dies hat das Potenzial, verursachen unerwartete Probleme in der app. Das einzige mal, sollten Sie false zurück ausonDown()
ist, wenn Sie wirklich wollen, zu ignorieren eine ganze Geste.http://developer.android.com/training/gestures/detector.html#detect
Dieser muss zuerst aufgerufen werden.