Comment faire pour réinitialiser AnimationDrawable
Je dois animer une circulaire de compte à rebours de la minuterie et je suis en train de faire en animant l'arrière-plan d'une ImageView à l'aide de AnimationDrawable (chaque image a la fonction de la tranche du cercle supprimé). Le problème est que l'utilisateur a la possibilité de mettre en pause l'animation, j'ai donc du rechargement de l'animation, mais un problème apparaît. J'ai essayé de réglage de l'animation à la valeur null, le réglage de l'arrière-plan de l'ImageView à null, la définition de la visibilité de l'animation, mais pratiquement rien n'a aidé, parce que nombre de cadres reste le même. J'ai trouver une solution de contournement pour la suppression de toutes les images et d'en ajouter de nouveaux ou de réinitialiser l'ensemble de l'animation à l'état par défaut.
Étape 1 - initialisation de l'animation (image de départ de l'indice est de 0)
timerView.setBackgroundResource(R.drawable.timer_switch);
timerAnimation = (AnimationDrawable)timerView.getBackground();
System.out.println("Number of frames: " + timerAnimation.getNumberOfFrames());
for (int frameIndex = startingFrameIndex; frameIndex < 60; frameIndex++) {
if (frameIndex < 10) {
uri = "drawable/timer_0000" + frameIndex;
} else {
uri = "drawable/timer_000" + frameIndex;
}
imageResourceId = getResources().getIdentifier(uri, null, getPackageName());
timerAnimation.addFrame(getResources().getDrawable(imageResourceId), timerImageFrameDuration);
}
Étape 2 - voici la partie la plus délicate où je ne sais pas quoi faire. Les choses que j'ai essayé:
timerAnimation.stop();
timerAnimation.setCallback(null);
timerAnimation.setVisibility(true, false);
timerAnimation = null;
Étape 3 - après l'appel de l'étape 2 j'appelle l'étape 1, mais le Sys.encore affiche 60 que le nombre actuel de cadres. (l'indice de départ ici est défini à la dernière frame cachée lorsque le bouton pause a été mis sur écoute.)
Toute idée est la bienvenue.
Grâce
- Pourrait ViewCompat.jumpDrawablesToCurrentState aider : developer.android.com/reference/android/support/v4/view/... ?
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème où l'arrêt de l'animation arrêt sur l'image actuelle. Je voulais qu'il se comporte comme iOS, où l'arrêt serait revenir à la première image. Cette solution fonctionne pour moi:
Ce premier arrêt (probablement pas nécessaire). Puis il tue l'animation en arrière-plan. Enfin, il recrée l'arrière-plan.
Cela va envoyer la (AnimationDrawable)
timerAnimation
à la première image dès questop()
a été appelé:stop()
fait le tour.Une autre solution possible serait d'avoir la même image de la première image et la dernière et procédez de la manière suivante au lieu d'appeler la méthode stop ().
si quelqu'un n'a pas l'air dans cette voie. Il y a aussi une méthode setVisible(boolean visible, boolean redémarrez-le). Toutefois, cela ne fonctionne pas pour moi.
Vous pouvez essayer
public boolean setVisible (boolean visible, boolean restart)
et il va jouer l'animation. Par exemple:android.vue.de l'animation.De l'Animation.reset() ne marche pas?