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