2012-01-31 19 views
7

Tengo un TextView que me gustaría contar hacia abajo (3 ... 2 ... 1 ... cosas pasan).Android Simple TextView Animation

Para que sea un poco más interesante, quiero que cada dígito empiece con una opacidad total y se desvanezca a transparencia.

¿Hay una manera simple de hacer esto?

Respuesta

11

intentar algo como esto:

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); 
} 

me acaba de escribir a cabo, por lo que podría no compila como es.

+1

reemplace 'tv.setText (count);' con 'tv.setText (String.valueOf (count));' y el código funciona bien –

2

Eche un vistazo a CountDownAnimation.

Intenté por primera vez la solución de @dmon, pero como cada animación comienza al final de la anterior, se produce un retraso después de varias llamadas.

Así que implementé la clase CountDownAnimation que usa una función Handler y postDelayed. Por defecto, utiliza la animación alfa, pero puede establecer cualquier animación. Puede descargar el proyecto here.

4

He usado una animación al estilo de Android más convencional para esto:

 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(); 

Se puede jugar con los valores 0 y count para que el contador de ir de cualquier número a cualquier número, y jugar con la 1000 para establecer la duración de toda la animación.

Tenga en cuenta que esto es compatible con Android API nivel 11 y superior, pero puede utilizar el impresionante proyecto nineoldandroids para que sea compatible con versiones anteriores fácilmente.