2012-01-31 13 views
7

Ho una TextView che vorrei fare il conto alla rovescia (3 ... 2 ... 1 ... cose succede).Android Simple TextView Animation

Per renderlo un po 'più interessante, voglio che ogni cifra inizi a piena opacità e si dissolva in trasparenza.

C'è un modo semplice per farlo?

risposta

11

provare qualcosa di simile:

private void countDown(final TextView tv, final count) { 
    if (count == 0) { 
    tv.setText(""); //Note: the TextView will be visible again here. 
    return; 
    } 
    tv.setText(count); 
    AlphaAnimation animation = new AlphaAnimation(1.0f, 0.0f); 
    animation.setDuration(1000); 
    animation.setAnimationListener(new AnimationListener() { 
    public void onAnimationEnd(Animation anim) { 
     countDown(tv, count - 1); 
    } 
    ... //implement the other two methods 
    }); 
    tv.startAnimation(animation); 
} 

ho scritto fuori, quindi potrebbe non compilare come è.

+1

sostituire 'tv.setText (count);' con 'tv.setText (String.valueOf (count));' e il codice funziona bene –

2

Dai uno sguardo allo CountDownAnimation.

Ho provato per la prima volta la soluzione @dmon, ma dal momento che ogni animazione inizia alla fine della precedente si finisce con un ritardo dopo diverse chiamate.

Quindi, ho implementato la classe CountDownAnimation che utilizza una funzione Handler e postDelayed. Per impostazione predefinita, utilizza l'animazione alfa, ma è possibile impostare qualsiasi animazione. Puoi scaricare il progetto here.

4

ho usato un'animazione Android in stile più convenzionale per questo:

 ValueAnimator animator = new ValueAnimator(); 
     animator.setObjectValues(0, count); 
     animator.addUpdateListener(new AnimatorUpdateListener() { 
      public void onAnimationUpdate(ValueAnimator animation) { 
       view.setText(String.valueOf(animation.getAnimatedValue())); 
      } 
     }); 
     animator.setEvaluator(new TypeEvaluator<Integer>() { 
      public Integer evaluate(float fraction, Integer startValue, Integer endValue) { 
       return Math.round((endValue - startValue) * fraction); 
      } 
     }); 
     animator.setDuration(1000); 
     animator.start(); 

Si può giocare con i valori 0 e count per rendere il contatore andare da un qualsiasi numero a qualsiasi numero, e giocare con la 1000 per impostare la durata dell'intera animazione.

Nota che questo supporta l'API di Android di livello 11 e superiore, ma puoi usare il fantastico progetto nineoldandroids per renderlo facilmente compatibile con le versioni precedenti.