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) {} }); } 
  • Diseño de materiales
  • Android salta onDraw () cuando ejecuto mi animación en reversa
  • Android: ¿Cómo mover un BitmapDrawable?
  • NineOldAndroids, no haga clic en la vista después de rotación o movimiento
  • Actualizar la animación del elemento de menú en ActionBarSherlock
  • Transición de elemento compartido (primer plano / fondo)
  • Rendering animación Maya en Android?
  • Cargar dinámicamente un AnimationDrawable en un TextView
  • Cómo hacer una animación fluida líquido en Android
  • Prueba de unidad de Android cuando la actividad tiene animación
  • FillAfter y fillEnabled no funcionan en la animación de vista de Android XML
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.