2017-02-14 1 views
-1

Ich habe den folgenden Code.Wie wiederhole ich mehrere Animationen Indefintly in Android

Iterator imagesIterator = mImages.iterator(); 
while (arrowsIterator.hasNext()) { 
    ImageView image = (ImageView) imagesIterator.next(); 

    TranslateAnimation anim = new TranslateAnimation(
     TranslateAnimation.ABSOLUTE, 0f, 
     TranslateAnimation.ABSOLUTE, 0f, 
     TranslateAnimation.RELATIVE_TO_PARENT, 0f, 
     TranslateAnimation.RELATIVE_TO_PARENT, 1.0f 
    ); 

    anim.setDuration(10000); 
    anim.setInterpolator(new LinearInterpolator()); 
    anim.setRepeatCount(Animation.INFINITE); 
    image.startAnimation(anim); 
} 

Die Idee ist, dass ich einen Satz alle Bilder wollen vom oberen Rand des Bildschirms nach unten zu „fallen“ und wiederholen, dass unendlich (von oben nach unten).

Das Problem, das ich jetzt habe, ist, dass es scheint, dass es wartet, bis alle Bilder mit ihrer Animation fertig sind, um sie alle auf einmal zu wiederholen.

Ich möchte das nicht, ich möchte, dass sie sich wiederholen, sobald jedes dieser Bilder den Boden erreicht, so dass es wie eine unendliche Kaskadenschleife von Bildern aussieht, die vom oberen Bildschirmrand fallen.

Ich hoffe, ich machte es klar. Vielen Dank!

Antwort

0

Ich denke, Sie gehen naiv davon aus, dass sobald image.startAnimation(anim) erreicht ist, die Animation gestartet wird.

In der Tat endet Ihre Schleife, dann wird eine Nachricht auf Main Looper gepostet, und dann werden Ihre Animationen gestartet. Und sie laufen gleichzeitig, weil Sie nichts anderes angegeben haben.

Was Sie tun können, ist eine erste Verzögerung für jede Animation in Ihrer Schleife zu geben.

Iterator imagesIterator = mImages.iterator(); 
long offset = 0; 
while (arrowsIterator.hasNext()) { 
    ImageView image = (ImageView) imagesIterator.next(); 

    TranslateAnimation anim = new TranslateAnimation(
      TranslateAnimation.ABSOLUTE, 0f, 
      TranslateAnimation.ABSOLUTE, 0f, 
      TranslateAnimation.RELATIVE_TO_PARENT, 0f, 
      TranslateAnimation.RELATIVE_TO_PARENT, 1.0f 
    ); 

    anim.setDuration(10000); 
    anim.setStartOffset(offset); 
    offset += 100; // each animation will be delayed by 100ms from the previous 
    anim.setInterpolator(new LinearInterpolator()); 
    anim.setRepeatCount(Animation.INFINITE); 
    image.startAnimation(anim); 
} 
+0

Ja eigentlich möchte ich, dass sie alle auf einmal beginnen. Aber sie enden auch alle auf einmal. Was ich herausgefunden habe, ist, dass die Übersetzungsversätze falsch konfiguriert sind. Wenn ich von -1.0f auf 1.0f setze und es eine Verzögerung gebe, während du schreibst, bekomme ich irgendwie das gewünschte Verhalten, nicht ganz, wie in der perferct world, was ich möchte, dass die Bilder immer wieder von oben auf dem Bildschirm starten sie sind völlig von der Bildfläche von unten. Das meinte ich mit einer Endlosschleife, die eine Kaskade simuliert. – martin

+0

Für diesen Kaskadeneffekt müssen Sie für alle Animationen unterschiedliche Dauern und unterschiedliche Offsets einstellen. – azizbekian