Aller au contenu

[Tutorial] Création d'un carrousel


bydavy

Recommended Posts

Salut,

Je viens de lire ton tutoriel sur le carousel pour Android et il contient quelques graves problèmes. Il réinvente aussi des choses qui existent déjà. Quand tu changes la visibilité des vues dans onDraw() tu déclenche des invalidate() qui vont causer ta view d'être redessinée en boucle. Tu vas probablement maximiser l'utilisation CPU et dans tous les cas gâcher la batterie.

Si tout ce que tu veux est réordonner l'affichage des views, utilise getChildDrawingOrder() (doc).

Tu appelles aussi getDrawingCache() manuellement ce qui est parfaitement inutile. Une fois le drawing cache activé sur les enfants, il suffit d'appeler drawChild(). Il suffit de faire tes transformations avant. Par exemple:

canvas.save();
canvas.rotate(15);
drawChild(canvas, theChild, getDrawingTime());
canvas.restore();

drawChild() se gère de gérer le drawing cache correctement, ainsi que pas mal d'autres choses.

Tu dessines également les enfants dans la méthode onDraw() ce qui n'est pas le bon endroit du tout. Dans un groupe de views il faut dessiner les enfants dans dispatchDraw() (ou dans draw() et ne pas appeler dispatchDraw().)

Ton idée est excellente mais l'implémentation a donc pas mal de problèmes.

Romain Guy

Ingénieur Android, Google

Lien vers le commentaire
Partager sur d’autres sites

Merci beaucoup pour ce carrousel ! :)

Pour ceux qui chercherait un système de coverflow (qui avouons-le ressemble beaucoup à notre carrousel) est disponible ici : http://www.inter-fuser.com/2010/02/android-coverflow-widget-v2.html

Pour revenir à ce carrousel, est-il adaptable pour pouvoir par exemple bouger l'image qui est au centre (au 1er plan, sélectionnée) par exemple un mouvement comme si on voulait sortir l'image du carrousel (comme par exemple un jeu de carte dont on choisirait une carte et on la sort du jeu...) ?

Si oui comment faire ?

Merci d'avance pour toutes vos réponses futures :)

Lien vers le commentaire
Partager sur d’autres sites

Autres questions plus centrées sur le projet (pour rappel ma question précédente portait sur un moyen d'animer la carte du centre) :

Que faut-il changer comme variable, autre que MAX_CHILDREN lorsqu'on veut mettre dans le carrousel + de 5 ImageView (il est bien évident que le XML a été modifié en conséquence) ?

Pour ma part je n'arrive à faire défiler que les 5 premières images (mouvement bas vers haut) et après impossible d'aller sur les images d'après, possibilité uniquement de revenir sur les images d'avant (mouvement haut vers bas)

De plus, est-il aisé (comme une 5ème variante par exemple) de rendre ce carrousel de gauche à droite plutôt que de haut en bas ?)

Merci d'avance :)

Modifié par djdamage
Lien vers le commentaire
Partager sur d’autres sites

@djdamage

Je vais joindre au tuto une version plus complète avec adapter et un paramétrage par XML. Cette version sera plus facilement exploitable et réutilisable que la version légère expliquée dans l'article. Je vais juste prendre quelques jours à nettoyer et commenter le code.

Merci

Lien vers le commentaire
Partager sur d’autres sites

Le tutoriel est mise à jour et tiens compte des différentes remarques.

Pour le moment uniquement le code source est disponible, et en guise d'excuse pour les quelques jours d'indisponibilité, c'est une version bien plu aboutie du code source que je vous fourni avec un Adapter et un Recycleur de vue pour essayer d'optimiser un peu les choses.

Je suis toujours preneur de vos commentaires.

Toute remarque est la bienvenue.

Lien vers le commentaire
Partager sur d’autres sites

  • 3 weeks later...

Salut ebuprofen !

La réponse est dans le code source, ou plus précisément dans le AndroidManifest.xml

Ainsi, le code source publié a était compilé avec Android 2.1

Quand à la compatibilité avec d'autres versions d'Android je n'ai pas pris le temps d'essayer... A voir donc.

Voilà tout

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...