2013-06-25 9 views
6

Ich habe eine ImageView, die ich als Ladeanimation rotiere. Sobald meine Daten geladen sind, versuche ich die Animation zu stoppen, aber anstatt zum Ende zu fahren und dann anzuhalten, geht die Animation auf einen halben Punkt, stoppt dann und das Bild springt zurück in seinen ursprünglichen Zustand, der ziemlich hässlich aussieht .Wie kann die Animation am Ende des Zyklus gestoppt werden?

Hier ist, was ich versucht habe:

Option 1:

ImageView iv = (ImageView) findViewById(R.id.refreshImage); 
if (iv != null) { 
    iv.clearAnimation(); 
} 

Option 2:

ImageView iv = (ImageView) findViewById(R.id.refreshImage); 
if (iv != null && iv.getAnimation() != null) { 
    iv.getAnimation().cancel(); 
} 

Option 3:

ImageView iv = (ImageView) findViewById(R.id.refreshImage); 
if (iv != null && iv.getAnimation() != null) { 
    iv.getAnimation().setAnimationListener(new AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation animation) { 

     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 
      animation.cancel(); 

     } 

     @Override 
     public void onAnimationEnd(Animation animation) { 

     } 
    }); 
} 

Das Ergebnis Ende ist das gleiche in allen drei Fällen. Wie drehe ich das Bild und lasse es dort enden, wo es angefangen hat?

Edit:

Einige weitere Informationen: Meine Rotation Animation:

<?xml version="1.0" encoding="utf-8"?> 
<rotate xmlns:android="http://schemas.android.com/apk/res/android" 
android:duration="1000" 
android:fromDegrees="0" 
android:interpolator="@android:anim/linear_interpolator" 
android:pivotX="50%" 
android:pivotY="50%" 
android:toDegrees="360" /> 

Wie ich die Animation zu starten:

ImageView iv = (ImageView) findViewById(R.id.refreshImage); 
Animation rotation = AnimationUtils.loadAnimation(this, R.anim.rotate); 
rotation.setRepeatCount(Animation.INFINITE); 
iv.startAnimation(rotation); 

Antwort

14

die Animation repeat auf unendlich gesetzt, bevor Sie es starten, dann Wenn die Aktion abgeschlossen ist, setzen Sie die Wiederholungszahl der Animation auf 0. Die Animation beendet die aktuelle Schleife und den Stopp ohne den zu vermeidenden Sprung.

//How you start 
Animation rotation = AnimationUtils.loadAnimation(this, R.anim.rotate); 
      rotation.setRepeatCount(Animation.INFINITE); 
iv.startAnimation(rotation); 

//You do your stuff while it spins 
... 

//You tell it not to repeat again 
rotation.setRepeatCount(0); 

Es ist wichtig, dass Sie es zuerst auf Animation.INFINITE gesetzt (oder -1, da sie das gleiche tun) und dann zu 0, wenn Sie es 1000 zum Beispiel festgelegt, dann aus irgendeinem Grunde nicht aufhört meinen nach testen.

+0

Einige meiner Animationen sind immer noch ein wenig nervös, aber es funktioniert für die meisten von ihnen, danke! – Catherine

+2

@Catherine es kann für Animationssätze, wo mehrere Dinge zur gleichen Zeit auftreten, nervös aussehen, haben es nicht getestet, aber für einfache Animationen ist dies der Weg zu gehen. –

+0

Danke für den netten Trick. Es wäre besser gewesen, Android eine API stopAfterCycleCompletion() oder etwas ähnliches zur Verfügung gestellt. – rpattabi

-2

iv.clearAnimation(); Um die Animation zu stoppen

Verwandte Themen