Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Inicio de un AnimationDrawable en Android

¿Dónde debo comenzar un AnimationDrawable que necesite animar cuando se muestra la actividad?

La guía del desarrollador recomienda utilizar onWindowFocusChanged , pero esto no siempre se llama cuando la actividad es parte de un TabHost .

Yo cito:

Es importante tener en cuenta que el método start () llamado en AnimationDrawable no se puede llamar durante el método onCreate () de su Actividad, ya que AnimationDrawable aún no está completamente conectado a la ventana. Si desea reproducir la animación de inmediato, sin requerir interacción, es posible que desee llamarla desde el método onWindowFocusChanged () de su Actividad, que se llamará cuando Android traiga su ventana al foco.

  • Cómo hacer una animación de derecha a izquierda en un diseño
  • ¿Cómo eliminar el retraso al abrir una actividad con un DrawerLayout?
  • Slidedown y slideup diseño con animación android
  • ObjectAnimator onAnimationEnd se escucha antes de que termine la animación
  • ¿Cómo llenar una vista con otra con Material Design Animation?
  • Expandiendo / Colapsando CardView con un gesto de clic o de deslizamiento (Android)?
  • AlphaAnimation no funciona
  • Android L animaciones morphing
  • 4 Solutions collect form web for “Inicio de un AnimationDrawable en Android”

    El enfoque de hilo paralelo parece ser el más popular, pero plantea dos grandes problemas:

    • De acuerdo con los documentos, todo el código relacionado con la interfaz de usuario debe ejecutarse en el subproceso principal (también conocido como "GUI"). Aunque llamar a .start () en un AnimationDrawable puede no considerarse una operación de interfaz de usuario pura, sigo sintiendo que debería seguir esa regla.
    • Usted nunca puede saber exactamente cuándo comenzará su animación. He visto código con valores de longitud de retardo "mágicos" que se suponía que arreglarían eso. Usted debe saber tht Dios mata a un bebé gatito cada vez que un programador toma ese enfoque.

    Por lo tanto, sugiero utilizar el método muy bien llamado runOnUiThread (). Llamarlo en onResume () le asegurará que su código de animación se ejecutará en el hilo principal, que se ejecutará después de la ventana se adjunta, usted sabe dónde exactamente el mensaje está a punto de ser procesado y no gatitos necesidad de perder su vive:

     @Override protected void onResume() { super.onResume(); runOnUiThread(new Runnable() { @Override public void run() { animation.start(); } }); } 

    Sé que esta pregunta es un poco vieja, pero esto puede ser útil para alguien que pasa a través de esta pregunta como lo hice. Una forma en que inicie mi AnimationDrawable es mediante la creación de un nuevo Runnable y utilizando el método de post de ImageView.

    Puedes hacer lo siguiente:

     ImageView spinner = (ImageView) findViewById(R.id.my_imageView); spinner.setBackgroundResource(R.drawable.spinner); spinner.post(new Runnable() { public void run() { AnimationDrawable anim = (AnimationDrawable) spinner.getBackground(); anim.start(); } }); 

    onResume() la actividad siempre se llama cuando la actividad llega al primer plano. Intente iniciarlo allí.

    De acuerdo con la documentación, debe esperar hasta que la vista se adjunte a la ventana antes de iniciar la animación. Por lo tanto, debe agregar un OnAttachStateChangeListener a la vista que se ejecutará cuando se ha adjuntado, e iniciar la animación desde allí.

     ImageView loadingImg = (ImageView)v.findViewById(R.id.image); loadingImg.setBackgroundResource(R.drawable.progressdialog); loadingImg.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { @Override public void onViewAttachedToWindow(View v) { AnimationDrawable loadingAnimation = (AnimationDrawable) v.getBackground(); loadingAnimation.start(); } @Override public void onViewDetachedFromWindow(View v) { } }); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.