Ho un'animazione di dissolvenza in una vista (che si trova all'interno di un frammento) e ogni volta che si verifica l'animazione, al termine della visualizzazione la vista si ridisegna nuovamente. Ho trovato un lavoro intorno a fare view.SetVisibility(View.GONE)
. Ma non aspetta che l'animazione finisca. Vorrei eseguire questo codice setVisibility solo dopo che l'animazione è terminata. Qual è il modo migliore per farlo?End animation event android
risposta
È possibile aggiungere animazione ascoltatore al vostro oggetto di animazione come
anim.setAnimationListener(new Animation.AnimationListener(){
@Override
public void onAnimationStart(Animation arg0) {
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
@Override
public void onAnimationEnd(Animation arg0) {
}
});
Se si desidera impedire l'animazione di fadeout per ricominciare mentre l'animazione è in corso, usare 'if (! anim.hasStarted() || anim.hasEnded())' per rilevare se l'animazione è ancora in esecuzione. – theczechsensation
È inoltre possibile raggiungere questo obiettivo usando Animation.setFillAfter
Ho usato questo per risolverlo prima. –
Basta prendere l'oggetto animazione e aggiungere animazioni ascoltatore ad esso. Ecco il codice di esempio:
rotateAnimation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
**// WRITE HERE WHATEVER YOU WANT ON THE COMPLETION OF THE ANIMATION**
}
});
Funzionalmente la stessa come la risposta accettata, ma in un modo molto più conciso:
/* Add/Remove any animation parameter */
theView.animate().alpha(0).setDuration(2000).withEndAction(new Runnable() {
@Override
public void run() {
theView.setVisibility(View.GONE);
}
});
Enjoy :)
Inserisci il codice come si sta mostrando la animazione .... –