2017-09-20 11 views
0

Étant donné:Affichage d'une pile d'images

  • Un certain nombre d'images (10 - 15) résidant dans le dossier actif (comme le montre la pratique, la meilleure approche est de garder des images haute résolution des actifs)
  • fil interface utilisateur Android (dessinables de mise en cache à l'avance est déjà fait dans un fil d'arrière-plan)

La question:

Vous devez afficher toutes les images les unes sur les autres en douceur et ne pas bloquer Fil d'interface utilisateur après le dessin des images.

approches déjà utilisées:

  • créer dynamiquement un nombre requis de ImageView puis appelez .setImageDrawable(). Cela prend beaucoup de temps mais la pire chose est que le thread de l'interface utilisateur est bloqué même après que toutes les images sont dessinées sur leur ImageView.
  • Créez un objet LayerDrawable et transmettez en argument un tableau du Drawable requis. Ensuite, mettez-le sur un ImageView également en appelant .setImageDrawable(). Cette option se comporte de la même manière que celle décrite ci-dessus.

Existe-t-il un moyen de résoudre ce problème? Ou les appareils Android ne sont pas capables de faire face à cela?

+0

comment affichez-vous ces images? Je veux dire dans la vue gridview ou recycleur? –

+0

Un FrameLayout en première approche, un ImageView dans la seconde. J'ai besoin de mettre des calques les uns sur les autres, pas de liste ou de grille – koresuniku

+0

Vous pouvez utiliser des bibliothèques de chargeur d'image pour cela. – Piyush

Répondre

0

Essayez bibliothèque Picasso:

http://square.github.io/picasso/ 

Il a le soutien des ressources:

Picasso.with(context).load(R.drawable.landing_screen).into(imageView1); 
Picasso.with(context).load("file:///android_asset/DvpvklR.png").into(imageView2); 
Picasso.with(context).load(new File(...)).into(imageView3); 
+0

J'ai déjà utilisé Glide, mais le rendu ne s'améliore pas. – koresuniku

+0

Jetez un oeil à la comparaison Glide et Picasso: https://medium.com/@multidots/glide-vs-picasso-930eed42b81d Glide a tendance à utiliser moins de mémoire, mais est également doucement plus lent que Picasso. Les deux bibliothèques ont une syntaxe similaire, vous pouvez donc essayer avec Picasso. – Gabo

+0

Les bibliothèques de chargement d'images, telles que Picasso, Glide, Fresco et ImageLoader, sont idéales pour la mise en cache asynchrone, la gestion de la mémoire, le chargement des images depuis le réseau, mais aussi à l'intérieur. que Android commence à dessiner l'interface utilisateur en mettant à jour un ImageView. Et voici où mon problème est, il ne dépend pas de la façon dont les images ont été chargées, mais comment ils sont affichés. – koresuniku

0

Si vous êtes exigeant une transition en douceur entre les images, s'il vous plaît essayer viewFlipper https://developer.android.com/reference/android/widget/ViewFlipper.html

Fondamentalement, vous peut ajouter imageView à l'intérieur du viewflipper et démarrer l'animation pour passer du précédent au suivant image. Je ne suis pas sûr si vous avez besoin d'interactions utilisateur comme le défilement ou non. Vous pouvez essayer viewPager si l'utilisateur doit faire défiler les images.

Veuillez noter que Glide fournit des effets de transition pour basculer entre l'espace réservé et l'image à afficher. Mais la transition entre les images ne sont pas incluses, vous pouvez jeter un oeil ici http://bumptech.github.io/glide/doc/transitions.html

J'espère que cela aide parce que je ne suis pas sûr que si vous demandez la transition entre les images ou le rendu des images.

+0

Merci pour la réponse, mais j'ai besoin de dessiner des images les unes sur les autres, de manière empilée. Je n'ai pas besoin de pages d'images ou d'animations sur eux. – koresuniku

+0

avez-vous l'image de mise en page souhaitée comme référence? –

+0

Désolé pour ça, je ne peux pas donner de photo. Mais il s'agit d'environ 2000 * 1500 px, format webp et ~ 100Kb de taille. – koresuniku