Cómo comprobar para ver si la animación se ejecuta antes de iniciar la nueva animación?

Tengo una actividad donde tengo varias ImageViews y cuando haga clic en el ImageView se fade out y fade de nuevo. Lo que estoy tratando de averiguar es cómo me puede hacer clic en un ImageView y comenzar la animación y cuando hago clic en un 2do uno y la animación está todavía en marcha va a ignorar el segundo. Creo que tengo que hacer algo con el animationListener pero no puedo averiguar cómo utilizar que para comprobar si la animación se está ejecutando o no antes de que se inicie una nueva animación. Yo podría haber jurado que vio un ejemplo que hice, pero he estado buscando por días y no puede encontrarlo, espero que alguien me pueda ayudar aquí….. a continuación está el código para mi animación:

//Create Animation
protected void fadeAnimation() {
    tempImg.startAnimation(fadeout);
    //Allow animation to finish
    mHandler.postDelayed(new Runnable() {
        public void run() {
        tempImg.startAnimation(fadein);
        }
    }, 1000);
}
InformationsquelleAutor Chris D | 2012-03-30

2 Kommentare

  1. 35

    Estoy asumiendo que ambos fadeout y fadein son Animation objetos.

    Uso fadeout.hasEnded() para comprobar si la primera ha terminado antes de empezar su segundo.

    Para obtener más detalles acerca de la Animation clase, ver aquí:
    http://developer.android.com/reference/android/view/animation/Animation.html

    • ¿qué sucede cuando la animación no se ha ejecutado todavía, así que no se que devolver un resultado falso por lo tanto la cancelación de la animación. Te voy a dar un tiro, pero ese es el primer pensamiento que vino a mi mente. Gracias por la ayuda, de cualquier manera.
    • Que lo hizo, sólo tenía que cambiar un par de cosas en la sintaxis y que funcionó de maravilla. Realmente aprecio la ayuda. Muchísimas gracias!
    • Estoy frente a un mismo problema. He comprobado el uso de hasEnded() función, pero el problema es primera vez que siempre devuelve false.Me pueden ayudar ?
    • se puede mostrar algo de su código, así puedo ver que tu problema puede ser?
    • cambiar la condición para if(!animation.hasStarted() || animation.hasEnded()) y deben funcionar las cosas.
    • gran trabajo el que están haciendo allí
    • ¿Quieres comprobar si la animación es más y, a continuación, realizar alguna acción… entonces puede ser que usted necesite un hilo separado, donde puede utilizar el bucle while para la prueba de un valor booleano decir isAnimationComplete

  2. 4

    Lugar de bucle posiblemente en otro hilo la comprobación de si una animación ha terminado, usted podría utilizar una animación oyente, haciendo algo como esto:

    //Create Animation
    protected void fadeAnimation() {
       fadeout.setAnimationListener(new Animation.AnimationListener(){
             @Override
             public void onAnimationStart(Animation animation) {
    
             }
             @Override
             public void onAnimationEnd(Animation animation) {
                  tempImg.startAnimation(fadein);
             }             
             @Override
             public void onAnimationRepeat(Animation animation) {
    
             }
    
       };
       tempImg.startAnimation(fadeout);
    
    }

    Con este tipo de solución no necesitan estar activamente la comprobación de si una animación ha terminado y el tiempo con la duración de la animación anterior.

    La onAnimationEnd(Animación) se disparó a la derecha después de la animación ha terminado. Esto también se soluciona el problema de los usuarios con las opciones de desarrollador «en» y la velocidad de la animación ajustado a «off».

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea