Ho un problema strano con una AlphaAnimation
. Si suppone che venga eseguito ripetutamente quando viene chiamato un gestore AsyncTask
.Animazione non partire fino a quando gli aggiornamenti dell'interfaccia utente o evento di tocco
Tuttavia, la prima volta che viene chiamato il gestore nello Activity
, l'animazione non verrà avviata a meno che non tocchi lo schermo o se l'interfaccia utente venga aggiornata (ad esempio premendo il pulsante del menu del telefono).
La parte strana è che una volta che l'animazione ha percorso almeno una volta, si avvierà senza problemi se il gestore viene chiamato di nuovo.
Ecco ciò che il codice è simile:
// AsyncTask handler
public void onNetworkEvent()
{
this.runOnUiThread(new Runnable() {
@Override
public void run()
{
flashScreen(Animation.INFINITE);
}
});
}
// Called method
private void flashScreen(int repeatCount)
{
final View flashView = this.findViewById(R.id.mainMenuFlashView);
AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
alphaAnimation.setRepeatCount(repeatCount);
alphaAnimation.setRepeatMode(Animation.RESTART);
alphaAnimation.setDuration(300);
alphaAnimation.setInterpolator(new DecelerateInterpolator());
alphaAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation)
{
flashView.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd(Animation animation)
{
flashView.setVisibility(View.GONE);
}
@Override
public void onAnimationRepeat(Animation animation) { }
});
flashView.startAnimation(alphaAnimation);
}
ho notato che runOnUIThread
non è necessario (stessi risultati si verificano se io non lo uso), ma preferisco tenerlo come io non sono sul thread dell'interfaccia utente.
Tutte le idee su che cosa potrebbe causare questo?
Codice troppo piccolo per capire qual è la sequenza di chiamata. Puoi pubblicare la parte del giro dell'esecuzione di Asynctask? Inoltre, hai provato a registrare la voce su metodi rilevanti per vedere cosa sta succedendo? – ilomambo
Provare a ritardare l'animazione di alcuni secondi per la prima volta. Questo può essere il caso quando stai cercando di eseguire l'animazione prima che la vista sia pronta. –