Photoview: Comment afficher initialement une image complète avec PhotoView ?

Créé le 17 avr. 2017  ·  9Commentaires  ·  Source: Baseflow/PhotoView

Salut les gars!
Tout d'abord, merci beaucoup pour votre superbe bibliothèque ! Bon travail!

À propos de mon problème : lorsque mon activité démarre, je souhaite afficher initialement l' image initialisation , je ne peux donc pas définir scale_type = center_crop, car après cela, je ne peux pas voir l'image complète lorsque je pince / zoome.

Merci beaucoup pour votre aide!

Commentaire le plus utile

Oui:

public void showFullScreen() {
        float photoViewWidth = mPhotoView.getWidth();
        float photoViewHeight = mPhotoView.getHeight();

        float viewScale = mPhotoView.getScale();
        RectF rect = mPhotoView.getDisplayRect();

        // Compute initial base rect
        float baseRectWidth = (rect.right - rect.left) / viewScale;
        float baseRectHeight = (rect.bottom - rect.top) / viewScale;

        // Compute medium scale for full size
        double mediumScale, currentScale;
        if (baseRectHeight > baseRectWidth) {
            mediumScale = photoViewWidth / baseRectWidth;
        } else {
            mediumScale = photoViewHeight / baseRectHeight;
        }

        mediumScale = Math.round(mediumScale * 100.0) / 100.0;
        currentScale = Math.round(mPhotoView.getScale() * 100.0) / 100.0;

        // Apply new scale: minimum or medium
        if (currentScale < mediumScale) {
            mPhotoView.setScale((float) mediumScale);

        } else {
            mPhotoView.setScale(mPhotoView.getMinimumScale());
        }
    }

Tous les 9 commentaires

Avez-vous trouvé une solution?

Je recherche également cette fonctionnalité

La fonction de zoom arrière sera bonne.

Avez-vous trouvé une solution?

Oui:

public void showFullScreen() {
        float photoViewWidth = mPhotoView.getWidth();
        float photoViewHeight = mPhotoView.getHeight();

        float viewScale = mPhotoView.getScale();
        RectF rect = mPhotoView.getDisplayRect();

        // Compute initial base rect
        float baseRectWidth = (rect.right - rect.left) / viewScale;
        float baseRectHeight = (rect.bottom - rect.top) / viewScale;

        // Compute medium scale for full size
        double mediumScale, currentScale;
        if (baseRectHeight > baseRectWidth) {
            mediumScale = photoViewWidth / baseRectWidth;
        } else {
            mediumScale = photoViewHeight / baseRectHeight;
        }

        mediumScale = Math.round(mediumScale * 100.0) / 100.0;
        currentScale = Math.round(mPhotoView.getScale() * 100.0) / 100.0;

        // Apply new scale: minimum or medium
        if (currentScale < mediumScale) {
            mPhotoView.setScale((float) mediumScale);

        } else {
            mPhotoView.setScale(mPhotoView.getMinimumScale());
        }
    }

@ anthony3444 J'ai essayé votre solution mais je n'ai rien obtenu. Lorsque j'appelle photoView.setScale (quelque chose), rien ne change. Est-ce que tu sais pourquoi?

@giusecapo si cela ne fonctionne pas pour vous, essayez de définir l'échelle APRÈS le rendu de la vue :

Exemple:

    dashboard_image = (PhotoView) TheView.findViewById(R.id.dashboard_image);

    ViewTreeObserver vto = dashboard_image.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        <strong i="8">@Override</strong>
        public void onGlobalLayout() {
            dashboard_image.getViewTreeObserver().removeOnGlobalLayoutListener(this);

            dashboard_image.setScale(2f);
        }
    });

@anthony3444
la solution fonctionne plus ou moins. mais provoque parfois des lancers :

java.lang.IllegalArgumentException : le zoom moyen doit être inférieur au zoom maximum. Appelez setMaximumZoom() avec une valeur plus appropriée

ajoutez simplement ceci dans votre photoview xml

android:adjustViewBounds="true" android:scaleType="fitXY"

Cette page vous a été utile?
0 / 5 - 0 notes