2 votes

Comment implémenter le zoom double tap dans Mupdf ?

Je recherche la bibliothèque Mupdf sur Android. J'ai compilé et lancé avec succès l'exemple. C'est vraiment une super bibliothèque. Mais maintenant, j'ai un problème avec le zoom de la page lorsque je déclenche l'événement "double tape".

Tout d'abord, j'ai mis en place mon View pour 'écouter' l'événement double tape :

public class MuPDFReaderView extends ReaderView implements GestureDetector.OnDoubleTapListener

Ensuite, j'ai remplacé la méthode onDoubleTap() :

@Override
public boolean onDoubleTap(MotionEvent e) {
    // TODO à générer
    MuPDFView pageView = (MuPDFView) getDisplayedView();
    pageView.setScale(1.5f);
    Log.e("double tap", "" + e.getDownTime());
    return false;
}

Lorsque je double tape sur la page, je peux voir le log "double tape" dans Logcat, mais la page n'est pas zoomée. Qu'est-ce que j'ai mal fait ici ?

1voto

Bruno Points 190

Je ne suis pas sûr pourquoi votre tentative n'a pas fonctionné, mais voici une autre façon de le faire :

Au lieu de mettre en œuvre le GestureDetector.OnDoubleTapListener sur votre View, mettez-le en œuvre directement sur le ReaderView que vous avez étendu

public class ReaderView extends AdapterView implements 
    GestureDetector.OnGestureListener,
    GestureDetector.OnDoubleTapListener,
    ScaleGestureDetector.OnScaleGestureListener,
    Runnable { ... }

et ensuite substituez la méthode OnDoubleTap comme ceci

@Override
public boolean onDoubleTap(MotionEvent e) {

    float previousScale = mScale;
    mScale += (mScale == 1f) ? 2f : -2f;
    float factor = mScale/previousScale;

    View v = mChildViews.get(mCurrent);
    if (v != null) {
        // Calculer le point de focus relatif au coin supérieur gauche de la vue
        int viewFocusX = (int)e.getX() - (v.getLeft() + mXScroll);
        int viewFocusY = (int)e.getY() - (v.getTop() + mYScroll);
        // Faire défiler pour maintenir le point de focus
        mXScroll += viewFocusX - viewFocusX * factor;
        mYScroll += viewFocusY - viewFocusY * factor;
        requestLayout();
    }

    return true;
}

Vous devrez également substituer ces 2 autres méthodes

@Override
public boolean onDoubleTapEvent(MotionEvent e) {
    return false;
}

@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
    return false;
}

J'ai obtenu ce code de l'exemple Android Librelio

https://github.com/libreliodev/android

0voto

GKTHEBOSS Points 51

Vous devez gérer cela via ReaderView. Modifiez l'échelle et initiez la mise en page de la requête.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X