2014-04-15 11 views
9

Sto usando Android KitKat e questo sembra non funzionare come previsto. Ho un AnimationSet che dovrebbe iniziare dopo un certo ritardo, ma voglio fare qualche azione quando l'animazione inizia effettivamente (dopo il ritardo). Sembra che AnimatorSet invochi suAnimationStarted sugli ascoltatori subito dopo aver chiamato start().AnimatorSet con setStartDelay chiama suAnimationStart

codice di esempio:

AnimatorSet set = new AnimatorSet(); 
set.playTogether(
    ObjectAnimator.ofFloat(obj, "x", 10), 
    ObjectAnimator.ofFloat(obj, "y", 10)); 
set.setStartDelay(5000); 
set.setDuration(1000) 

set.addListener(new AnimatorListenerAdapter() 
{ 
    @Override 
    public void onAnimationStart(Animator animation) 
    { 
     // do sth 
    } 
}); 

set.start(); 

In questo caso l'ascoltatore viene richiamato immediatamente invece di ritardo. Per ovviare a questo problema, ho verificato se aggiungere il listener agli animatori passati in playTogether restituisce il risultato previsto e in effetti lo fa. è un insetto?

+0

non può la risposta, ma per ottenere ciò che si desidera è possibile utilizzare TimerTask o Thread.sleep per il ritardo. Handler è anche un altro approccio – Nepster

risposta

3

Un'altra soluzione per questo è:

@Override 
public void onAnimationStart(Animator animator) { 
    rootView.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      // todo 
     } 
    }, set.getStartDelay()); 
}