French Librairie Animation : Comment faire un arrêt ?

PicTech

Member
Licensed User
Longtime User
Bonjour,

Je viens de simplifier le code de AnimationExample.zip pour utiliser seulement l'effet du bouton #5 mais je n'arrive pas à arrêter l'effet à mi-chemin. J'essaie juste de faire disparaitre progressivement un bouton en cliquant dessus. Mon problème est que le bouton diminue au point de disparaitre mais revient toujours à sa grandeur initial à cause de "REPEAT_REVERSE", je ne trouve pas comment placer un "Stop" pour éviter la renverse.

B4X:
'Activity module
Sub Process_Globals
    
End Sub

Sub Globals
    Dim Bouton1 As Button
End Sub 

Sub Activity_Create(FirstTime As Boolean)
    Dim Animation1 As Animation
    Activity.LoadLayout("1")
    
    Animation1.InitializeScaleCenter("", 1, 1, 0, 0, Bouton1)
    Bouton1.Tag = Animation1
    
    Animation1.Duration = 1000
    Animation1.RepeatCount = 0
    Animation1.RepeatMode = Animation1.REPEAT_REVERSE

End Sub

Sub Button_Click
    Dim b As Button
    b = Sender
    'Safety check. Not really required in this case.
    If Not(b.Tag Is Animation) Then Return
    Dim a As Animation
    a = b.Tag
    a.Start(b)
End Sub
Merci de votre aide.
Richard.
 

Informatix

Expert
Licensed User
Longtime User
Il faut savoir que cette bibliothèque revient toujours à l'image de départ à la fin de l'animation. C'est exaspérant et incompréhensible, mais bon... Il n'y a pas 36000 solutions: soit tu rends l'image invisible à la fin de l'animation si elle est censée disparaître, soit tu la remplaces par son aspect final.
Du moment que RepeatCount est à 0, RepeatReverse n'a aucune incidence.
 

PicTech

Member
Licensed User
Longtime User
Il faut savoir que cette bibliothèque revient toujours à l'image de départ à la fin de l'animation. C'est exaspérant et incompréhensible, mais bon...

Avec mon gros une semaine d'expérience sur Android je pensais bien que j'avais rien compris à son fonctionnement.

Peux-tu me dire si on a un remplacement plus approprié ?

Merci de ton aide précieuse Fred.
 

Informatix

Expert
Licensed User
Longtime User
Peux-tu me dire si on a un remplacement plus approprié ?

Je n'ai pas encore exploré d'autres voies. Il y a d'un côté les animations purement graphiques (bibliothèque OpenGL et cie) et de l'autre les animations de vues. Dans ce dernier cas, la bibliothèque TweenEngine me paraît top mais je ne l'ai vue qu'en démo pour l'instant. Je n'ai rien fait avec.

Salutations
 

PicTech

Member
Licensed User
Longtime User
Salut Fred,

les animations de vues. Dans ce dernier cas, la bibliothèque TweenEngine me paraît top mais je ne l'ai vue qu'en démo pour l'instant. Je n'ai rien fait avec.

Je viens de ramasser ce démo: http://www.b4x.com/forum/additional...een-engine-animate-your-views.html#post113953

Vraiment très bien! Le mouvement est très fluide, même sur l'émulateur. Je vais l'étudier mais je me demande si je pourrais pas juste m'écrire une procédure toute simple.

En réalité je veux juste faire disparaitre un objet (bouton, panneau ou image) par une diminution progressive de sa dimension. Ça donnerait comme une image qui se fermerait un peu comme une ancienne TV en cliquant sur le bouton "Fermer" en dessous.

Prochaine,
Richard.
 

Informatix

Expert
Licensed User
Longtime User
En réalité je veux juste faire disparaitre un objet (bouton, panneau ou image) par une diminution progressive de sa dimension. Ça donnerait comme une image qui se fermerait un peu comme une ancienne TV en cliquant sur le bouton "Fermer" en dessous.

Je pense que la bibliothèque Animation devrait suffire (effet ScaleCenter). Dans le gestionnaire de l'événement AnimationEnd, supprime la vue ou rend-la invisible.

Salutations.
 

PicTech

Member
Licensed User
Longtime User
C'est justement ça mon problème, j'arrive pas à déclencher l'événement AnimationEnd.

B4X:
'Activity module
Sub Process_Globals
End Sub

Sub Globals
   Dim Bouton1 As Button
End Sub 

Sub Activity_Create(FirstTime As Boolean)
   Dim Animation1 As Animation
   Activity.LoadLayout("1")
   Animation1.InitializeScaleCenter("", 1, 1, 0, 0, Bouton1)
   Bouton1.Tag = Animation1
   Animation1.Duration = 1000
   Animation1.RepeatCount = 0
End Sub

Sub Button_Click
   Dim b As Button
   b = Sender
   'Safety check. Not really required in this case.
   If Not(b.Tag Is Animation) Then Return
   Dim a As Animation
   a = b.Tag
   a.Start(b)
End Sub

Sub Animation_AnimationEnd
   Activity.Finish
End Sub

Dis-moi ce qui me manque.

Merci d'avance...
 

Informatix

Expert
Licensed User
Longtime User
Animation1.InitializeScaleCenter("", 1, 1, 0, 0, Bouton1)
devrait être:
Animation1.InitializeScaleCenter("Animation", 1, 1, 0, 0, Bouton1)

Tu as appelé ton gestionnaire d'événement Animation_AnimationEnd, il faut donc que tu initialises ton animation avec ce nom (enfin, la première partie du nom).
Si tu l'avais appelé Toto_AnimationEnd, il aurait fallu faire cette initialisation:
Animation1.InitializeScaleCenter("Toto", 1, 1, 0, 0, Bouton1)
 

PicTech

Member
Licensed User
Longtime User
Problème RÉSOLU

devrait être:
Animation1.InitializeScaleCenter("Animation", 1, 1, 0, 0, Bouton1)

Excellent, merci à toi grand maitre, ça fonctionne maintenant très bien après 2 ans, ouppss, 2 jours de misère! :)

Richard.
 
Top