2013-06-25 11 views
6

Ho un ImageView che sto ruotando per essere utilizzato come animazione di caricamento. Una volta caricati i miei dati, provo a fermare l'animazione, ma invece di andare in bicicletta fino alla fine e poi fermarsi, l'animazione va a metà strada, quindi si arresta, e quindi l'immagine torna allo stato originale, che sembra piuttosto brutto .Come fermare l'animazione alla fine del ciclo?

Ecco che cosa ho provato:

Opzione 1:

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

Opzione 2:

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

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

     } 
    }); 
} 

Il risultato finale è lo stesso in tutti e tre i casi. Come faccio a ruotare l'immagine e farla tornare dove è iniziata?

Edit:

Alcuni ulteriori informazioni: La mia rotazione di animazione:

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

Come vorrei iniziare l'animazione:

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

risposta

14

Impostare il repeatCount animazione infinito prima di iniziare, poi quando l'azione termina, imposta il numero di ripetizioni dell'animazione su 0. L'animazione termina il ciclo corrente e lo stop senza il salto che vuoi evitare.

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

E 'importante che prima imposta a Animation.INFINITE (o -1 dal momento che fanno lo stesso) e poi a 0, se lo si imposta a 1000 per esempio, allora non ci vorrà fermarsi per qualche motivo secondo il mio test.

+0

Alcune delle mie animazioni sono ancora un po 'nervose, ma funziona per la maggior parte di esse, grazie! – Catherine

+2

@Catherine può sembrare nervoso per i set di animazione in cui si verificano più cose contemporaneamente, non l'hanno testato ma per le animazioni semplici questa è la strada da percorrere. –

+0

Grazie per il bel trucco. Sarebbe stato meglio che Android fornisse un'API stopAfterCycleCompletion() o qualcosa del genere. – rpattabi

-2

iv.clearAnimation(); per fermare l'animazione

Problemi correlati