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


¿Cómo iniciar la animación inmediatamente después de onCreate?

Estoy siguiendo http://developer.android.com/guide/topics/graphics/view-animation.html#frame-animation con pequeños cambios. He decidido hacer el bucle de animación y quiero que empiece desde el principio.

Mi animación está en drawable / listening.xml:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/l_01" android:duration="200" /> <item android:drawable="@drawable/l_02" android:duration="200" /> <item android:drawable="@drawable/l_03" android:duration="200" /> </animation-list> 

Y mi código de inicio:

  @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); animImg = (ImageView)findViewById(R.id.listen_anim); animImg.setBackgroundResource(R.drawable.listening); anim = (AnimationDrawable) animImg.getBackground(); anim.start(); }; 

Todo lo que veo es el primer marco y no hay otras imágenes.

  • Android no anima alfa si es inicialmente cero
  • Cambiar el tamaño de los diseños de forma programática (como animación) hasta "wrap_content"
  • Finaliza la actividad cuando se devuelve una respuesta del servidor, pero espera que termine la animación
  • LayoutTransition: Animar la vista junto a una vista en expansión
  • ¿Cómo hago pausas la animación de los cuadros usando AnimationDrawable?
  • Tutorial - Android Mapa Pin gota animación - Trabajando derecho
  • ¿Animaciones de PageCurl en las transiciones de ViewPager?
  • ¿Es posible cambiar el valor final de ObjectAnimator con la animación iniciada?
  • 6 Solutions collect form web for “¿Cómo iniciar la animación inmediatamente después de onCreate?”

    Ya está escrito en el tutorial:

    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.

    Así que mueva su llamada para comenzar en uno de esos dos lugares, dependiendo de su deseo. Sobre la base de su comentario, mueva su llamada para iniciar dentro de onWindowsFocusChanged () .

    EDIT Así que esto es "Cómo hacerlo" :

     @Override public void onWindowFocusChanged(boolean hasFocus) { if(hasFocus){ textView.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.slide_in_left|android.R.anim.fade_in)); } } 

    Los puntos a prestar atención son:

    • No olvide escribir el caso if / else para comprobar el enfoque
    • Y eliminar el auto-generado "super.onWindowFocusChanged (hasFocus); "

    Tenga una bandera establecida en onAttachedToWindow() y luego en onWindowFocusChanged() compruebe e inicie la animación.

     @Override void onWindowFocusChanged(boolean hasFocus) { if (hasFocus & mbFlag) { // start animation. } } 

    Actualizar

    Simplemente extienda la clase ImageView y anule el método onFocusChange . Luego, en tu actividad, selecciona el foco llamando animImg.requestFocus() . La animación debe comenzar cuando se enfoca. Asegúrese de que su vista de imagen se pueda enfocar.

    Si esto no funciona, es posible que desee anular el método onAttachedToWindow() también. Establecer una bandera y comprobar antes de iniciar la animación.

     @Override void onFocusChange(boolean hasFocus) { if (hasFocus) { // start animation. } } 

    Puede utilizar el método de post de cualquier View de la actividad. Probablemente debería tener este aspecto:

     View anyView = findViewById(R.id.anyView); anyView.post(new Runnable() { @Override public void run() { // Your code goes here } }); 

    Necesita dar tiempo al administrador de la interfaz de usuario para crear recursos apropiados ANTES de iniciar la animación. El patrón correcto es

     a) Create animation object in onCreate. b) Start animation object elsewhere. 

    No cree y comience en el mismo método.

     animation = AnimationUtils.loadAnimation(this, R.anim.push_left_out); yourobject.startanimation(animation); 

    Esto puede ayudar

    Ejecute esto en onResume ():

     class AnimTask extends AsyncTask<String, String,String> { Activity act; AnimTask(Activity act) { this.act = act; } @Override protected String doInBackground(String... params) { act.runOnUiThread(new Runnable() { public void run(){ animImg = (ImageView)findViewById(R.id.listen_anim); animImg.setBackgroundResource(R.drawable.listening); anim = (AnimationDrawable) animImg.getBackground(); anim.start(); } }); return null; } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.