Une histoire d'animation, de View et d'idées

Introduction : Xiti nique bien ta mère la grosse pute.

Salut les gens,

Je suis en train de développer une app android, le principe est simple : j'appuie sur un Bouton, ça me rajoute un LinearLayout avec 2 lignes de texte, si je rappuie sur ce même bouton, ça m'en rajouter un autre juste à coté, etc.

Donc à chaque view rajouté, je leur donne un ID spécifique : comme ça, quand je clique sur l'un des view créé dynamiquement, je sais lequel a été sélectionné.

Pour sélectionner un View particulier (via un View.OnClickListener), j'appuie dessus, je stocke l'ID de ce View dans la var ACTUAL_USER_SELECTED, et j'lui applique une animation bête (scale from 1 to 1.8 par exemple). Même quand il y a plusieurs View ajoutées, j'arrive à appliquer cette animation sur une seule View (celle qui a été sélectionnée).

Mais c'est au moment de désélectionner que j'ai un soucis : quand je rappuie dessus (sur le Layout préalablement sélectionné, qui a fait sa petite animation bien jolie), je lui applique une seconde animation (scale from 1.8 to 1, pour suivre l'autre exemple). Mais, le soucis est là : l'animation s'applique à tous les Layout créés, et non pas seulement à celui sélectionné....

Du coup, je me demande s'il n'y a pas moyen d'appliquer cette animation de déselection à l'unique Layout qui a été préalablement créé...

Je vous laisse un screen de mon code source où on peut voir la création des Layout dynamiques, et la sélection (+ animation) de chacun d'eux, mais c'est au moment de la déselection que ça foire, et je n'arrive pas à trouver de solution pour appliquer cette deuxième animation à l'unique Layout préalablement sélectionné :

EDIT2 : Du coup, je laisse une preview de mon application pour mieux visualiser le problème, je fous le code en commentaire

(Spoiler : Je sais que l'endroit où ça foire c'est dans le childLayout.setOnClickListener mais je ne sais pas du tout comment régler ça...)

Oui mon code n'est pas encore optimisé, merci. Oui j'utilise encore Eclipse et pas AndroidStudio, j'ai aussi remarqué!

Une histoire d'animation, de View et d'idées
Poster un commentaire
testme
testme
7 ans

Et le code

Aussi, je m'en fous de la partie graphique de la chose (les textView coupés par l'animation), ce n'est pas le coeur du soucis

IMG
anonyme
anonyme
a
7 ans

Rectification: d'apres ta preview, ca ne dezoome que les views déjà sélectionnées au préalable (et pas toutes)

testme
testme
7 ans

@gowaps: Oui exactement !

anonyme
anonyme
a
7 ans

@testme: Tu peux préciser tes animations pour voir ce que ca fait au niveau de tes Views ? Parce que ca les zoom, puis dezoom ensuite.
Et si tu peux ajouter un log dans ton onClickListener voir si c'est bien un clickEvent qui lance cette animation sur toutes ces vues.

testme
testme
7 ans

@gowaps: Tu as le code de l'animation dans mon commentaire en dessous, et quand tu dis de rajouter un log dans le onclicklistener, tu veux dire quoi par là ?
J'ai rajouté un textview dans la vue principale qui s'actualise quand j'appuie sur les view créées (en m'affichant le v.getId() (dans la var k), c'est à dire que j'ai foutu un tv.setText("k : " + v.getId() + [...]) juste après le onClick de mon View.onClickListener )

anonyme
anonyme
a
7 ans

@testme: C'est nickel, j'avais un doute justement
Je remarque aussi que malgré le dézoom intempestif, les views ne changent pas de couleur comme elles le devraient en passant dans le else if (pas de bleu foncé).

Tu peux tenter un v.setAnimation(null) après chaque startAnimation pour nettoyer les animations de tes vues, mais j'y crois assez peu..

Bon, à part remarquer ce qui ne va pas, je t'aide pas trop, j'avoue que je sèche

testme
testme
7 ans

@gowaps: Merci, mais ça ne marche pas, vu que ça me supprime tout simplement l'animation !

Dans tous les cas, merci d'avoir essayé, je vais me pencher sur une autre manière de faire !

(ah oui pour la couleur, c'était fait exprès, pour voir si le soucis venait de tout le "if (désélection)", ou si ça ne s'appliquait qu'à l'animation seule)

anonyme
anonyme
a
7 ans

@testme: J'pouvais plus editer l'ancien comment, mais du coup je voulais ajouter que le v.startAnimation() s'effectue sur toutes les vues enfants.
Peut-être que le linear zoomé s'étire tout le long de son parent, ou autre schmilblick, mais permettrait de lancer la dernière animation stockée dans toutes les views de rLUser; soit rien lorsqu'elle n'a jamais été cliquée, ou alors l'anim de dezoom.

Ca n'explique pas le non changement de couleur de la vue cliquée, mais ces animations seraient annulables via un v.setAnimation(null), en espérant que ca ne kill pas direct l'animation (dans ce cas, tu peux test avec un AnimationListener: http://stackoverflow.com/questions/4750939/android-animation-is-not-finished-in-onanimationend ).
Mais ca reste assez hypothétique comme solution.

En tout cas, hésite pas a faire tourner ou créer un post SO, j'suis assez curieux

anonyme
anonyme
a
7 ans

@testme: Ah le coquin pour les couleurs hihi
Du coup ca te kill l'animation en état initial ou final ? Tu peux toujours nullifier l'animation de la vue en passant par un listener: http://stackoverflow.com/questions/4750939/android-animation-is-not-finished-in-onanimationend

testme
testme
7 ans

@gowaps: Bordel à cul !! C'était le clearAnimation() qui me manquait.
Putain, 4h que je suis dessus, et j'y ai pas pensé. Merci !
Du coup, ça me supprime le scale final, mais quand je fais la vérif au ralenti, les deux animations ne s'appliquent qu'à la seule View sélectionnée.

Merci !

anonyme
anonyme
a
7 ans

@testme: gg!

testme
testme
7 ans

@gowaps: J'te filerai une preview de l'app finale si jamais t'es intéressé !
Merci pour ton aide ;) !

anonyme
anonyme
a
7 ans

@testme: Ah pourquoi pas, d'ailleurs si t'as besoin de testeurs, hesite pas non plus!
Et de rien !

testme
testme
7 ans

@gowaps: J'ai fait un peu la refonte graphique de mon app, et ai modifié les anims (vu que le scale me faisait pas mal chier, mais je l'utiliserai pour d'autres parties de l'application).
Il faudra que j'optimise quelques trucs, et que je rajoute encore 2-3 fonctions, et je te filerai mon boulot, on pourrait même bosser dessus à deux si jamais :)

IMG
testme
testme
7 ans

Ah, et les lignes initialisant mes animations, au cas où...

Et le main.xml, qui a cette hierarchie :

- RelativeLayout
--- LinearLayout : id = rootLayout, orientation = horizontal
--- Button
--- Button

Et quand on ajoute les "Users" :

- RelativeLayout
------ LinearLayout : id = rootLayout, orientation = horizontal
------------ LinearLayout : orientation = vertical
--------------- TextView : User1
--------------- TextView : Description
------------ LinearLayout : orientation = vertical
--------------- TextView : User2
--------------- TextView : Description
------------ etc
------ Button
------ Button

IMG
Cette page est réservée aux ADULTES

Tu es sur le point d'accéder à un site web qui contient du matériel explicite (pornographie).

Tu ne dois accéder à ce site que si tu as au moins 18 ans ou si tu as l'âge légal pour visionner ce type de matériel dans ta juridiction locale, l’âge le plus élevé étant retenu. En outre, tu déclares et garantis que tu ne permettras aucun mineur à d'accéder à ce site ou à ces services.


En accédant à ce site, tu acceptes nos conditions d'utilisation.