Comment puis-je modifier la durée d'une animation Android AnimationDrawable à la volée?
Je suis nouveau sur la plate-forme Android. Je suis à l'aide de la suite de l'animation d'un ensemble de 16 "cadres" à l'aide de AminationDrawable dans mon application:
Dans le fichier XML que j'ai:
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/image_1" android:duration="200" />
<item android:drawable="@drawable/image_1_25" android:duration="200" />
<item android:drawable="@drawable/image_1_5" android:duration="200" />
<item android:drawable="@drawable/image_1_75" android:duration="200" />
<item android:drawable="@drawable/image_2" android:duration="200" />
<item android:drawable="@drawable/image_2_25" android:duration="200" />
<item android:drawable="@drawable/image_2_5" android:duration="200" />
<item android:drawable="@drawable/image_2_75" android:duration="200" />
<item android:drawable="@drawable/image_3" android:duration="200" />
<item android:drawable="@drawable/image_3_25" android:duration="200" />
<item android:drawable="@drawable/image_3_5" android:duration="200" />
<item android:drawable="@drawable/image_3_75" android:duration="200" />
<item android:drawable="@drawable/image_4" android:duration="200" />
<item android:drawable="@drawable/image_4_25" android:duration="200" />
<item android:drawable="@drawable/image_4_5" android:duration="200" />
<item android:drawable="@drawable/image_4_75" android:duration="200" />
</animation-list>
Dans le code Java j'ai le texte suivant
abord, je suis la déclaration de la classe et de l'ajout d'un onCreate()
méthode où j'ai mis en place l'animation.
public class MyNewActivity extends Activity
{
//member variables (accessible from within class methods below).
AnimationDrawable mainAnimation;
long mSpeed = 50;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.my_widget);
//set up image
ImageView mainImage = (ImageView) findViewById(R.id.image_widget);
mainImage.setBackgroundResource(R.drawable.animated_image);
mainAnimation = (AnimationDrawable) mainImage.getBackground();
};
<...snip...>
...puis plus tard, je commence mon dessin lorsque l'utilisateur appuie sur un bouton j'appelle la commande suivante pour démarrer l'animation en mouvement:
private void start()
{
//start the image rotating.
if (mainAnimation.isRunning())
mainAnimation.stop();
int numFrames = mainAnimation.getNumberOfFrames();
for (int ii = 0; ii < numFrames; ii++ )
{
//change the animation speed.
Drawable d = mainAnimation.getFrame(ii);
mainAnimation.scheduleDrawable(d, mainAnimation, mSpeed);
}
}
<...snip...>
Ailleurs dans le code, j'ai une place pour ajuster la variable membre mSpeed
. Si je fais cela, puis appeler start()
l'animation va commencer, mais la vitesse est toujours la même (essentiellement ce qui a été défini dans le fichier XML ci-dessus. Ma question est, comment puis-je modifier la "durée" des images pour déplacer cette animation plus vite ou plus lentement, basée sur la saisie de l'utilisateur? Je ne vois aucune façon de modifier une "durée" de l'état, et était sous l'hypothèse de la ScheduleDrawable()
appel ci-dessus, serait de modifier le dessin de trames de durée.
source d'informationauteur markmalin | 2010-12-06
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème mais j'ai réussi à résoudre lors de la lecture de la le code source de AnimationDrawable par la mise en œuvre de mon propre AnimationDrawable classe qui étend la classe AnimationDrawable et remplacer le
Run()
méthode et ajoutersetDuration()
méthode qui me permet de définir la durée comme suit:Par l'examen de l'origine de la méthode run, nous voyons qu'il fasse la même chose mais en appelant
scheduleSelf(this, SystemClock.uptimeMillis() + duration);
avec la durée que vous avez spécifié lors de l'ajout de l'image donc je l'ai changé. J'ai aussi ajouter une durée parce que j'utilise le même pour toutes mes images, mais vous pouvez utiliser le tableau de la nouvelle durée.C'est ma première réponse donc j'espère que ça vous aide, vous et c'est bien expliqué.