Yo quiero hacer una muy simple alfa de animación, pero no puedo encontrar una manera válida.

La idea es realizar esta animación más vistas:

  1. alfa de 0 a 1 de 1 segundo
  2. mantener alfa a 1 durante 5 segundos
  3. alfa de 1 a 0 de 1 segundo
  4. mantener alfa a 0 durante 5 segundos.
  5. empezar de nuevo en 1.

He tratado de implementar que con un AnimationSet como:

AnimationSet animationSet = new AnimationSet(true);

Animation animation1 = new AnimationUtils.loadAnimation(this, android.R.anim.fade_in);
animation1.setDuration(1000);

Animation animation2 = new AnimationUtils.loadAnimation(this, android.R.anim.fade_out);
animation2.setDuration(1000);
animation2.setStartOffset(5000);

Animation animation3 = new AlphaAnimation(0.0f, 0.0f);
animation3.setDuration(4000)
animation3.setStartOffset(6000);

animationSet.add(animation1);
animationSet.add(animation2);
animationSet.add(animation3);

etc..

pero las costuras que la tercera animación a hacer un lío con todos los alfa animaciones, he de suponer que esta causa interna de la incoherencia en la forma en que Android gestionar este tipo de animación.

Alguna idea?

Gracias.

  • Puede usted por favor decirme si mi código funcionó bien ? Y por favor, acepte la respuesta si sí
InformationsquelleAutor zegnus | 2010-07-21

2 Comentarios

  1. 106

    Aceptar tener en cuenta que estos 2 puntos para resolver este


    • Si quiero animar 1.0f to 0.0f después de 5 segundos con una animación duración de 1 segundo, se trata en definitiva de un 1 segundo de animación con una pausa de 5 segundos.

      Para lograr este:

      1. setDuration(1000) (tiene 1 segundo de duración)
      2. setStartOffset(5000) (se realizará después de 5 segundos)

    • Solo necesitas 2 animaciones que se repiten indefinidamente.

      1.0.0f to 1.0f con 5 segundos de pausa y 1 segundo de duración

      2.1.0f to 0.0f con 5 segundos de pausa y 1 segundo de duración


    Y aquí está el código:

        animation1 = new AlphaAnimation(0.0f, 1.0f);
        animation1.setDuration(1000);
        animation1.setStartOffset(5000);
    
        animation2 = new AlphaAnimation(1.0f, 0.0f);
        animation2.setDuration(1000);
        animation2.setStartOffset(5000);
    
        textView.startAnimation(animation1);

    Sin embargo bucle para siempre voy a utilizar AnimationListener porque repeatCount es buggy:

        animation1 = new AlphaAnimation(0.0f, 1.0f);
        animation1.setDuration(1000);
        animation1.setStartOffset(5000);
    
        //animation1 AnimationListener
        animation1.setAnimationListener(new AnimationListener(){
    
            @Override
            public void onAnimationEnd(Animation arg0) {
                //start animation2 when animation1 ends (continue)
                textView.startAnimation(animation2);
            }
    
            @Override
            public void onAnimationRepeat(Animation arg0) {
                //TODO Auto-generated method stub
    
            }
    
            @Override
            public void onAnimationStart(Animation arg0) {
                //TODO Auto-generated method stub
    
            }
    
        });
    
        animation2 = new AlphaAnimation(1.0f, 0.0f);
        animation2.setDuration(1000);
        animation2.setStartOffset(5000);
    
        //animation2 AnimationListener
        animation2.setAnimationListener(new AnimationListener(){
    
            @Override
            public void onAnimationEnd(Animation arg0) {
                //start animation1 when animation2 ends (repeat)
                textView.startAnimation(animation1);
            }
    
            @Override
            public void onAnimationRepeat(Animation arg0) {
                //TODO Auto-generated method stub
    
            }
    
            @Override
            public void onAnimationStart(Animation arg0) {
                //TODO Auto-generated method stub
    
            }
    
        });
    
        textView.startAnimation(animation1);
    • La respuesta perfecta! Muchas gracias!
    • también se puede utilizar para esperar 5 segundos y, a continuación, mostrar algo? con el fin de controlador.post retraso.
  2. 17

    Hay una solución más simple a este.

    Permite suponer que su vista está en estado DESAPARECIDO. Para animar a su visibilidad:

    yourView.setVisibility(View.VISIBLE);
    yourView.animate().alpha(1).setDuration(300);

    A través de la misma manera que usted puede añadir animación a los oyentes.

    Esto también funciona para la escala y la traducción de las animaciones.

    • Muy bueno. Gracias.

Dejar respuesta

Please enter your comment!
Please enter your name here