11
votes

Détecteur de geste ne fonctionne pas

J'ai le gesturelistener suivant:

    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;
        }
    }


1 commentaires

Merci Merci Marcos Votre réponse modifiée m'a beaucoup aidé à résoudre le problème.


3 Réponses :


42
votes

ONTODOWN () doit retourner true même si vous ne voulez pas réagir à cet événement , sinon cela fera le détecteur Jeter tout événement suivant et donc tout geste.


2 commentaires

Hmm ... je l'ai fait et travaille maintenant, je suis confus, j'ai d'autres cours avec des retours faussement annulés et fonctionnent.


@Marcos euh ... qui me confond aussi maintenant ... cette incohérence pourrait faire une bonne question à laquelle je suppose.



5
votes

si vous utilisez ou non gesturetector.ongesturelistener , il est préférable de mettre en œuvre une méthode indown () qui renvoie true. En effet, tous les gestes commencent par un message ONTODOWN () . Si vous retournez FALSE de ONTODOWN () , comme gestureTector.simpleongesturelistener fait par défaut, le système suppose que vous souhaitez ignorer le reste du geste et les autres méthodes de GestureTector.Gesturelistener Jamais appelé. Cela a le potentiel de causer des problèmes inattendus dans votre application. La seule fois que vous devez retourner faux de ONTODOWN () est si vous voulez vraiment ignorer un geste entier.

http://developer.android.com/training/gestures/detector .html # Détecter


0 commentaires

1
votes
[view].setLongClickable(true);
This must be called first.

0 commentaires