Jump to content

[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

Link to comment
Share on other 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 :)

Link to comment
Share on other 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 :)

Edited by djdamage
Link to comment
Share on other 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

Link to comment
Share on other 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.

Link to comment
Share on other 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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...