Animar un fragmento de diálogo sobre descartar

Estoy tratando de obtener un diálogo para animar cuando cerrado – He tratado de sobrescribir el descarte, onDismiss, onCancel y onDestroy métodos como a continuación, sin suerte – ¿puede alguien me apuntan en la dirección correcta?

@Override public void dismiss() { if (mDismissAnimationFinished) { super.dismiss(); } else { mShrink.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { mDismissAnimationFinished = true; dismiss(); } @Override public void onAnimationRepeat(Animation animation) { } }); mCurrentContainer.startAnimation(mShrink); } } 

Acabo de hacer esto con una subclase regular del diálogo y mi solución debe transferir sobre a DialogFragment exactamente.

Parece que estás muy cerca, sólo que deberías llamar a super.dismiss() en onAnimationEnd () en lugar de dismiss dismiss() . La razón es que si llama a dismiss() , recursivamente llamará a la función que ya está en!

EDITAR:

Defina un método wrapper en la clase externa o llámelo con YourDialogFragment.super ().

 void parentDismiss() { super.dismiss() } 

Y llame eso desde su onAnimationEnd() .

Incluso entonces, usted todavía tendrá un problema más con las condiciones de carrera cuando se cancela el diálogo y se está descartando por otro hilo. Para solucionar esto, establezca un boolean mIsDismissed la primera vez que su onDismiss () se llama de modo que si se llama de nuevo antes de que otro onStart() ocurra (anulará onStart () para voltear la parte booleana) que onDismiss() No se ejecuta dos veces.

He escrito una solución aquí, que no utiliza DialogFragment , sólo un diálogo regular. Se prueba y funciona, por lo que basta con mirar la lógica que utilizo y copiar, o si lo desea, utilizarlo.

https://github.com/tom-dignan/nifty/blob/master/src/com/tomdignan/nifty/dialogs/NiftyProgressDialog.java

Puede acceder a la clase externa donde el oyente se sienta simplemente llamando a la clase con su super. Así: Classname.super.method()

 public void dismiss() { yourAnimation.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) {} @Override public void onAnimationEnd(Animation animation) { classNameOfYourDialog.super.dismiss(); } @Override public void onAnimationRepeat(Animation animation) {} }); } 
  • Imagen giratoria. Animación de la lista o rotación animada? (Androide)
  • Cómo girar un icono de Android en su punto central?
  • RecyclerView - No hay animación en NotifyItemInsert
  • Problema con cajones deslizantes y animaciones
  • Animación de la vista de un niño fuera del padre
  • Cómo construir animador de diapositivas arriba / abajo en XML para android?
  • Transición de animación entre actividades mediante FLAG_ACTIVITY_CLEAR_TOP
  • Una manera fácil de hacer funcionar la animación GONE
  • Transición de la actividad de Android en un ListView
  • ¿Efecto de desplazamiento personalizado para scrollview?
  • Cómo ocultar la vista cuando se hace la animación en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.