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 protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec) 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 !
Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
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 protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec) 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 publicObjectinstantiateItem(ViewGroupcontainer,intposition).
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.
Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
Lorsque je me fixais sur une page, je mettais à jour mon model par la méthode publicvoidonPageSelected(intposition). 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.
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.