La animación no se inicia hasta que las actualizaciones de la interfaz de usuario o el evento de toque
Tengo un problema extraño con una AlphaAnimation
. Se supone que se ejecuta repetidamente cuando se llama a un controlador AsyncTask
.
Sin embargo, la primera vez que se llama al manejador en la Activity
, la animación no se iniciará a menos que toque la pantalla o si la interfaz de usuario se actualiza (pulsando el botón de menú del teléfono, por ejemplo).
- ¿Cómo puedo crear un widget de interfaz de usuario de diseño de material de Android?
- Sombra interna en el círculo
- ¿Hay herramientas de interfaz de usuario personalizadas para Android?
- Android: ¿Hay alguna manera de cambiar la altura del botón de conmutación?
- ¿Es posible iniciar un DialogFragment desde una preferencia en una preferenciaActivity?
La parte extraña es que una vez que la animación se ha ejecutado al menos una vez, se iniciará sin problema si el controlador se llama de nuevo.
A continuación se muestra el aspecto del código:
// AsyncTask handler public void onNetworkEvent() { this.runOnUiThread(new Runnable() { @Override public void run() { flashScreen(Animation.INFINITE); } }); } // Called method private void flashScreen(int repeatCount) { final View flashView = this.findViewById(R.id.mainMenuFlashView); AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0); alphaAnimation.setRepeatCount(repeatCount); alphaAnimation.setRepeatMode(Animation.RESTART); alphaAnimation.setDuration(300); alphaAnimation.setInterpolator(new DecelerateInterpolator()); alphaAnimation.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { flashView.setVisibility(View.VISIBLE); } @Override public void onAnimationEnd(Animation animation) { flashView.setVisibility(View.GONE); } @Override public void onAnimationRepeat(Animation animation) { } }); flashView.startAnimation(alphaAnimation); }
He notado que runOnUIThread
no es necesario (los mismos resultados ocurren si no lo uso), pero prefiero guardarlo como no estoy en el hilo de UI.
¿Alguna idea sobre qué podría causar esto?
- ¿Están disponibles marcadores para la navegación de vistas panorámicas en Android?
- TransitionDrawable con nueve parches - el margen es incorrecto
- Android- Problema con reemplazo de tamaño de imagen en versiones android diferentes para el texto MultiAutoCompleteTextview
- Android: las trampas de eliminar carpetas ldpi / mdpi
- ¿Por qué llamar a setScaleX durante el gesto de pinch zoom causa parpadeo?
- Cómo personalizar el estilo de botón Material de AppCompat?
- Bibliotecas de código abierto de Android? ¿Vistas reutilizables, ViewGroups, adaptadores etc?
- Imagen animada recortada
Un poco más de investigación mostró que mi problema era el mismo una pregunta: Animación de diseño no funciona en la primera ejecución
La visibilidad del flashView
se estableció en GONE
de forma predeterminada (haciendo que la Animation
no se inicie inmediatamente, ya que la View
nunca se había procesado), por lo que solo necesito configurarla en INVISIBLE
antes de llamar a flashView.startAnimation()
Si configurar la View
VISIBLE
no funcionará, como en mi caso, me ayudó a llamar a requestLayout()
antes de iniciar la Animation
, así:
Animation an = new Animation() { ... view.requestLayout(); view.startAnimation(an);
En mi caso, mi View
era 0dip
alto que impedía onAnimationStart
de ser llamado, esto me ayudó en torno a ese problema.
Esto funcionó para mí:
view.setVisibility(View.VISIBLE); view.startAnimation(animation);
Tuve que configurar la view
VISIBLE
(no INVISIBLE
, ni GONE
), causando la visualización de la renderización necesaria para animarla.
Eso no es fácil. Hasta que tengas una respuesta real: El inicio de la animación es activado por onNetworkEvent. Como no sabemos el resto del código, deberías buscarlo, tratar de cambiar onNetworkEvent por otro evento que puedas identificar fácilmente, solo para depurar si el resto del código está bien o si es sólo el gatillo que es Responsable de ello.