web-dev-qa-db-fra.com

Retards dans l'animation (TranslateAnimation)

Existe-t-il un moyen de laisser la Animation faire une pause d'une demi-seconde?

J'essaie de créer une animation infinie à l'aide de l'API TranslateAnimation. Donc, j'utilise la RepeatCount comme Infinite. J'ai également remarqué qu'il existe une méthode setStartOffset(...) qui couvre le cas où j'aimerais retarder le démarrage de l'animation. Cependant, je ne peux pas trouver un moyen d'avoir un délai avant chaque «redémarrage». Puisque l'animation va se passer un nombre infini de fois, chaque fois que l'animation redémarre, je dois mettre un délai.

Des idées?

Merci!!

14
ymotov

voici un exemple:

D'abord la mise en page (main.xml) avec une image que nous aimerions animer:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:orientation="vertical" >

    <ImageView
        Android:id="@+id/imageView1"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:src="@drawable/ic_launcher" />

</LinearLayout>

La prochaine est l'animation. Placé dans res/anim et s'appelle anim_img.xml. Le fichier contient l'animation de traduction avec Android: startOffset = "500" (en millisec). Cela va définir le décalage, qui est utilisé à chaque démarrage de l'animation:

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

    <translate
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:duration="1000"
        Android:fromXDelta="0%"
        Android:fromYDelta="0%"
        Android:toXDelta="0%"
        Android:toYDelta="100%"
        Android:zAdjustment="top" 
        Android:repeatCount="infinite"
        Android:startOffset="500"/>

</set>

Et le dernier mais non le moindre - l'activité. Qui commence l'animation:

public class StackOverflowActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ImageView iv_icon = (ImageView) findViewById(R.id.imageView1);

        Animation a = AnimationUtils.loadAnimation(this, R.anim.anim_img);
        a.setFillAfter(true);
        a.reset();

        iv_icon.startAnimation(a);
    }
}

A bientôt, Paul

12
Spipau

Pour obtenir une pause de x millisecondes entre chaque redémarrage:

myAnimation.setAnimationListener(new AnimationListener(){

        @Override
        public void onAnimationStart(Animation arg0) {
        }
        @Override
        public void onAnimationEnd(Animation animation) {
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
            myAnimation.setStartOffset(x);
        }

    });
9
Paola G

myanimation.setStartDelay (int);

0
Drx