手势探测器不工作

Mar*_*los 11 android listener gesture

我有以下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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我通过这种方式将它添加到我的视图中:

view.setOnTouchListener(new BookListener(book, main));
Run Code Online (Sandbox Code Playgroud)

但是在运行时,事件不会被触发,我调试它,我看到onDown被调用,但onSingleTapConfirmed或onDoubleTap nevers工作.

怎么了?

我的代码完美无缺:

    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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

big*_*nes 41

onDown()true即使您不想对该事件作出反应,必须返回,否则它将使探测器丢弃任何后续事件,从而丢弃任何手势.


Sha*_*mar 5

无论是否使用GestureDetector.OnGestureListener,最好的onDown()方法都是实现返回true 的方法。这是因为所有手势均以onDown()消息开头。如果您从onDown()GestureDetector.SimpleOnGestureListener默认情况下从返回false ,则系统会假定您要忽略其余手势,而其他方法GestureDetector.OnGestureListener从不被调用。这有可能在您的应用程序中引起意外问题。只有onDown()当您真正想忽略整个手势时,才应返回false 。

http://developer.android.com/training/gestures/detector.html#detect