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 alinear LinearLayout en el centro de su matriz?
- Elemento expandible en la lista de Android
- Android ListView - se desplaza de nuevo al principio en la actualización
- Android - ¿hay una devolución de llamada que se llama justo después onResume ()?
- Vista del adaptador dinámico con un tamaño de columna irregular o Horizontal StaggeredGridView
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?
- Detectar la disponibilidad de la barra de navegación suave en el dispositivo android de forma progmática?
- Android Dim Fondo de diálogo personalizado
- Android Night Mode sin CarModeEnabled
- Creación de una vista de configuración equivalente a las vistas del sistema
- En Android, utilizando la misma barra de herramientas (elementos RelativeLayout) en varias vistas
- ViewPager con FragmentPagerAdapter no muestra contenido
- Cómo diseñar una ruleta en Android
- Escala Dibujable - ¿setImageLevel determina la escala?
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.