Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Résolution d'une ImageView dans un ViewPager

Sujet résolu
    30 avril 2012 à 17:49:15

    Bonjour à tous,

    Dans le cadre de mon stage, je dois confectionner un lecteur de PDF sur Android. Pour ce faire, j'ai établis une architecture MVC afin d'avoir 2 vues qui écoutent mon modèle. 2 vues car je dois superposer l'image de la page courante du PDF et le PDF. A ce niveau là, pas trop de problème (du moins, tant que je ne touche pas à la possibilité de zoomer).

    Mon problème est un peu vicieux : Mon image (vue qui étend ImageView) est modifié par des calculs matriciels pour parvenir à une fluidité lors du zoomer et de translations. Chaque page de mon ViewPager possède donc une image. Cependant, ces images ont une résolution énorme. J'ai donc réduis sa résolution par ce code :

    final BitmapFactory.Options options = new BitmapFactory.Options();
    int inSampleSize = 4;
    options.inSampleSize = inSampleSize;
    return BitmapFactory.decodeFile(sPath + "/" + current.getPathImage(), options);
    

    Je n'ai pas encore adapté le changement de résolution à la taille de l'écran. Je préfère rester simple dans un premier temps.

    Ce code marche plutôt bien, sauf pour la première page et la dernière page qui n'effectuent pas les modifications d'échelle présent dans la méthode protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) redéfini dans ma vue personnalisée. Il ne passe donc pas par cette méthode lorsque je reviens à la page une ou lorsque j'atteins la dernière page.

    Des gens auraient des pistes pour m'aider à résoudre le problème ? Je suis preneur. :)
    Merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
    Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
      2 mai 2012 à 10:08:53

      Je comprends que le problème est un peu technique alors j'ai ciblé un peu plus le problème :

      Comme je redimensionne mon image via sa méthode protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) de mon ImageView, il faut qu'il passe par l'instanciation de la vue courante. J'ai donc un peu regarder qu'est ce qu'il faisait à ce niveau là :
      • Lancement de l'application : instancie suivant la limite par défaut de 1. Il passe 2 fois par la méthode public Object instantiateItem(ViewGroup container, int position).
      • Quand je navigue une première fois, il re-instancie la vue qu'il a normalement déjà fait.
      • Quand je reviens à la première page, il n'instancie pas la vue (qu'il aura aussi déjà du instancier puisque je reste dans la limite définie par défaut)
      Et donc, il n'effectue pas les modifications matricielles sur la première page. (même chose pour la dernière).
      Si vous avez des idées, je suis preneur.
      • Partager sur Facebook
      • Partager sur Twitter
      Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
        2 mai 2012 à 10:41:30

        Bien, bien, j'ai trouvé la solution :

        Lorsque je me fixais sur une page, je mettais à jour mon model par la méthode public void onPageSelected(int position). Pour remettre les zoom à zéro, je re-instanciais la matrice aussi. Du coup, j'ai supprimer cette re-instanciation et ça fonctionne. Cependant, ce n'est sans doute pas la meilleure solution.

        Je marque ce topic en résolu mais si vous avez mieux, je suis preneur. :)
        • Partager sur Facebook
        • Partager sur Twitter
        Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.

        [Android] Résolution d'une ImageView dans un ViewPager

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown