0

Je suis la construction d'une application où je veux glisser des images comme si elles étaient des photos sur une pile. En d'autres termes, si je balaye l'image du haut, je veux qu'elle s'anime en se déplaçant dans la direction du balayage et que l'image suivante en dessous soit visible tout le temps. Pour ce faire, j'utilise un FrameLayout et deux conteneurs ImageView. Je suis en train d'alterner lequel est en haut. Pendant ce temps, dès qu'un balayage se produit, l'image suivante est chargée dans le ImageView à l'arrière en utilisant setBackground(drawable). Mon problème est que le ImageView à l'arrière ne met pas à jour son image jusqu'à ce que j'appelle bringToFront() dessus, ce qui signifie que comme le ImageView est en train d'animer, l'image ci-dessous est incorrecte jusqu'à ce que l'animation se termine, à quel point il change brusquement à la image correcte J'ai essayé d'appeler invalidate() à l'arrière ImageView après setBackground(drawable) mais cela ne fonctionne pas. Quelqu'un a-t-il des idées sur la façon de mettre à jour l'image pendant qu'elle est en retard?Android: Mettre à jour l'arrière-plan ImageView tout en étant derrière d'autres ImageView

MISE À JOUR: Il se trouve que je ne suis pas très bon aujourd'hui. Je mettais à jour le mauvais ImageView et parce que le chargement de l'image a été fait hors du réseau, il y avait juste assez de décalage pour me faire penser qu'il se produisait après l'animation terminée.

Répondre

0

Semble à moi comme vous voulez faire quelque chose comme un Image Slider.

Il y a de grandes bibliothèques existantes à cet effet, celui-ci par exemple:

https://github.com/daimajia/AndroidImageSlider


Si vous ne voulez pas utiliser cela, voici quelques conseils:

  • Les images sur ImageView sont définies avec setImageDrawable(Drawable)

  • Lorsque votre animation démarre, définissez la nouvelle image sur ImageView et faites-la glisser vers l'extérieur.

  • Lorsque le ImageView visible a glissé loin, définissez sa visibilité à GONE et se déplacer derrière la deuxième ImageView

Faites cela pour chaque fois qu'une nouvelle image est chargée.

Cela devrait fonctionner.

+0

Je vais devoir regarder dans AndroidImageSlider, mais en attendant ces étapes sont essentiellement exactement ce que je fais. Je suis passé de 'setBackground (drawable)' à 'setImageDrawable (drawable)' mais cela n'a fait aucune différence. Les deux autres étapes sont ce que je fais. Je pense que le problème est que ImageView ne met pas à jour son image sauf si sa position z est en haut, ou quelque chose comme ça de toute façon. Je n'arrive tout simplement pas à comprendre comment le forcer à redessiner avant qu'il ne soit en haut. – Nick

+0

Peut-être que vous postez votre code pour que je puisse l'inspecter. – Axel

+0

Je me sens penaud ... Il se trouve que je mettais à jour le mauvais 'ImageView' de sorte que c'est ce qui causait le problème. Je vous vote pour avoir raison, mais je n'ai pas assez de réputation. Merci de votre aide! – Nick

0

Vous avez besoin d'un "ViewPager"

https://developer.android.com/training/animation/screen-slide.html

Il a toutes les poignées nécessaires pour accueillir nombre "N" d'images - soutient également plusieurs animations swipe - gestionnaires par défaut - Gestion efficace de la mémoire - prélecture - vous êtes tous dans un festin avec cela !!

Assurez-vous que vous obtenez le "ImageView" dans la mise en page des "pages" que vous souhaitez développer sur le "ViewPager".

+0

Merci pour la réponse! Je pensais à faire un ViewPager mais je ne voulais pas que beaucoup de transactions de fragment. Merci encore! – Nick

+0

@Nick une raison pour laquelle vous ne voulez pas de transactions Fragment? il ne fera que rendre votre application plus performante avec un cycle de vie indépendant et la pré-extraction se produira automatiquement lorsque l'utilisateur balaie une image – takrishna