L’animation Android ne se répète pas

J’essaie de faire une animation simple qui se répète plusieurs fois (ou infiniment).
Il semble que android:repeatCount ne fonctionne pas!
Voici ma ressource d’animation à partir de /res/anim/first_animation.xml :

      

Tout d’abord, il devrait mettre à l’échelle l’image de taille 1.0 à 1.2 en 500 ms.
Et puis redimensionner à 1,0 en 500 ms.
Voici comment je l’utilise:

 Animation firstAnimation = AnimationUtils.loadAnimation(this, R.anim.first_animation); imgView.startAnimation(firstAnimation); 

Il fait un cycle et se termine ensuite.
Il s’agrandit puis réduit et s’arrête.

Comment puis-je faire ce travail comme prévu?

Mise à jour: En septembre 2011, un ingénieur Android a résolu ce problème pour la plupart. Les atsortingbuts qui ont été ignorés dans XML fonctionnent désormais, à l’exception de repeatCount et fillEnabled qui sont toujours ignorés ( fillEnabled pour une raison quelconque). Cela signifie qu’il n’est toujours pas facile de répéter un jeu AnimationSet malheureusement.

Pour plus de détails, reportez-vous à l’aperçu des documents mis à jour (explique quels atsortingbuts sont ignorés, lesquels fonctionnent et ceux qui sont transmis aux enfants). Et pour une meilleure compréhension de ce que font fillAfter , fillBefore et fillEnabled , consultez l’article de blog de l’ingénieur (Chet Haase) ici .


Réponse originale

Pour développer les réponses de Pavel et des autres: il est vrai que la est ridiculement boguée. Il ne peut pas traiter correctement avec repeatCount et un certain nombre d’autres atsortingbuts.

J’ai passé quelques heures à déterminer ce qu’il peut et ne peut pas faire et j’ai soumis un rapport / problème de bogue ici: Numéro 17662

En résumé (cela concerne AnimationSet s):

setRepeatCount () / android: repeatCount

Cet atsortingbut (ainsi que repeatMode) ne fonctionne pas en code ou en XML. Cela rend difficile la répétition d’un ensemble complet d’animations.

setDuration () / android: durée

Définir cela sur un AnimationSet dans le code WORKS (remplace toutes les durées des animations enfants), mais pas lorsqu’il est inclus dans la balise en XML

setFillAfter () / android: fillAfter

Cela fonctionne dans le code et le XML pour la balise. Étrangement, je l’ai obtenu pour fonctionner sans avoir à définir fillEnabled sur true.

setFillBefore () / android: fillBefore

Semble n’avoir aucun effet / ignoré tant en code qu’en XML

setFillEnabled () / android: fillEnabled

Semble n’avoir aucun effet / ignoré tant en code qu’en XML. Je peux toujours utiliser fillAfter pour travailler même sans inclure fillEnabled ou en définissant fillEnabled sur false.

setStartOffset () / android: startOffset

Cela fonctionne uniquement en code et non en XML.

J’ai trouvé que la balise était implémentée dans la classe AnimationSet .
Il ne peut pas traiter correctement avec repeatCount .
Ce que nous pouvons faire – est de définir directement repeatCount dans la balise .

Cette ressource XML fonctionne bien:

 < ?xml version="1.0" encoding="utf-8"?>  

Malheureusement, ceci est limité à une seule animation à la fois.
Nous ne pouvons pas définir une séquence d’animations de cette façon …

Vous devriez inclure l’atsortingbut

 android:repeatCount="infinite" 

Mais dans votre animation “scale” pas dans “set”

Pour obtenir une animation répétée, j’ai utilisé le programme d’écoute d’animation et j’ai de nouveau appelé l’animation à la fin. Cela fait un réticule de caméra se concentrant comme une animation avec des crochets.

Voici la disposition de l’animation xml

 < ?xml version="1.0" encoding="utf-8"?>     

Voici le code java

  public void startAnimation() { View brackets = findViewById(R.id.brackets); brackets.setVisibility(View.VISIBLE); Animation anim = AnimationUtils.loadAnimation(BuzzFinderActivity.this, R.anim.crosshair_focusing); anim.setAnimationListener(new AnimationListener() { @Override public void onAnimationEnd(Animation arg0) { Animation anim = AnimationUtils.loadAnimation(BuzzFinderActivity.this, R.anim.crosshair_focusing); anim.setAnimationListener(this); brackets.startAnimation(anim); } @Override public void onAnimationRepeat(Animation arg0) { // TODO Auto-generated method stub } @Override public void onAnimationStart(Animation arg0) { // TODO Auto-generated method stub } }); brackets.startAnimation(anim); } 

J’étais également confronté au même problème .. j’ai inclus Android: repeatCount = “infini” dans le fichier XMl..Maintenant, il fonctionne bien …