2013-06-25 47 views
6

Mam ImageView, który obracam do wykorzystania jako animacja ładowania. Po wczytaniu danych próbuję zatrzymać animację, ale zamiast jechać do końca, a następnie zatrzymywać się, animacja przechodzi do połowy, a następnie zatrzymuje się, a następnie obraz wraca do pierwotnego stanu, który wygląda dość paskudnie .Jak zatrzymać animację po zakończeniu cyklu?

Oto co próbowałem:

Wariant 1:

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

Opcja 2:

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

Wariant 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) { 

     } 
    }); 
} 

Końcowym rezultatem jest to samo we wszystkich trzech przypadkach. Jak obrócić obraz i zakończyć go z powrotem tam, gdzie się zaczął?

Edit:

Niektóre dalsze informacje: Moja animacja rotacji:

<?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" /> 

Jak uruchomić animację:

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

Odpowiedz

14

Ustaw repeatCount animacja do nieskończoności, zanim go uruchomić, a następnie gdy akcja się zakończy, ustaw liczbę powtórzeń animacji na 0. Animacja zakończy bieżącą pętlę i zatrzymanie bez skoku, którego chcesz uniknąć.

//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); 

Ważne jest, aby najpierw ustawić go Animation.INFINITE (lub -1, ponieważ robią to samo), a następnie do 0, jeśli ustawisz go 1000 na przykład, to przyzwyczajenie powstrzymać jakiegoś powodu według mojego testowanie.

+0

Niektóre z moich animacji wciąż są trochę niezręczne, ale działa dla większości z nich, dzięki! – Catherine

+2

@Catherine może wyglądać skandalicznie w przypadku zestawów animacji, w których jednocześnie występuje wiele rzeczy, nie przetestowano go, ale w przypadku prostych animacji jest to sposób na wykonanie. –

+0

Dzięki za miłą sztuczkę. Byłoby lepiej, gdyby Android dostarczył api stopAfterCycleCompletion() lub coś w tym stylu. – rpattabi

-2

iv.clearAnimation(); zatrzymać animację