2012-03-30 7 views
24

Ok, quindi ho un'attività in cui ho più ImageViews e quando si fa clic su di essa l'ImageView si dissolverà e si dissolverà. Quello che sto provando per capire è come posso fare clic su un ImageView e avviare l'animazione e quando faccio clic su un 2 ° e l'animazione è ancora in esecuzione ignorerà il secondo. Penso di aver bisogno di fare qualcosa con l'animazioneListener ma non riesco a capire come usarlo per verificare se l'animazione è in esecuzione o meno prima di iniziare una nuova animazione. Potrei giurare di aver visto un esempio che ha fatto questo, ma ho cercato giorni e non riesco più a trovarlo, spero che qualcuno possa aiutarmi qui ..... sotto c'è il codice per il mio animazione:ANDROID - come verificare se l'animazione è in esecuzione prima di avviare la nuova animazione

// Create Animation 
protected void fadeAnimation() { 
    tempImg.startAnimation(fadeout); 
    //Allow animation to finish 
    mHandler.postDelayed(new Runnable() { 
     public void run() { 
     tempImg.startAnimation(fadein); 
     } 
    }, 1000); 
} 

risposta

29

sto assumendo sia dissolvenza e fadein sono Animation oggetti.

Utilizzare fadeout.hasEnded() per verificare se il primo è terminato prima di avviare il secondo.

Per ulteriori informazioni sulla classe Animation, vedere qui: http://developer.android.com/reference/android/view/animation/Animation.html

+5

cosa succede quando l'animazione non è ancora stata eseguita, quindi non restituirebbe un risultato falso annullando così l'animazione. Darò un colpo ma questo è il primo pensiero che mi è venuto in mente. Grazie per l'aiuto in entrambi i casi. –

+0

Ciò ha funzionato, è bastato cambiare alcune cose nella sintassi e ha funzionato alla grande. Apprezzo molto l'aiuto. Grazie mille! –

+1

@ChrisD Sto affrontando lo stesso problema. Ho controllato utilizzando la funzione hasend() ma il problema è la prima volta che restituisco sempre false. Mi aiuti? – Kunu

2

Invece di dover ciclo possibilmente in un altro thread controllare se un'animazione è terminato, è possibile utilizzare un listener di animazione, fare qualcosa di simile:

// Create Animation 
protected void fadeAnimation() { 
    fadeout.setAnimationListener(new Animation.AnimationListener(){ 
     @Override 
     public void onAnimationStart(Animation animation) { 

     } 
     @Override 
     public void onAnimationEnd(Animation animation) { 
       tempImg.startAnimation(fadein); 
     }    
     @Override 
     public void onAnimationRepeat(Animation animation) { 

     } 

    }; 
    tempImg.startAnimation(fadeout); 

} 

Con questo tipo di soluzione non è necessario verificare attivamente se un'animazione è terminata e cronometrare con la durata dell'animazione precedente.

L'onAnimationEnd (Animazione) viene attivato subito dopo l'animazione. Questo risolve anche il problema degli utenti con le opzioni di sviluppo "on" e la velocità di animazione impostata su "off".

Problemi correlati