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); } }
- Diseño de materiales
- Smooth Progress Bar Animación
- Crear Revelación Circular para Dispositivos Pre-Lollipop
- Android - TabActivity con animación de Transición
- Animación Android startOffset roto o buggy?
- ListView de Android Actualizar animación
- Youtube Play / pausa Animated Vector Drawable en android
- ¿Cómo modificar la propiedad MaxLines de TextView con animación?
- Las transiciones de elementos compartidos no funcionan cuando se combinan con un CoordinatorLayout y CollapsingToolbarLayout
- Android: agregar vista con animación de expansión (sin parpadear)
- Makecaleupanimation de appwidget
- Android Gauge Animation Pregunta
- Cómo aplicar mediante programación simultáneamente translate & scale animation en una vista
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.
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) {} }); }
- ¿Cómo aceptar la solicitud de amigos correctamente en Android smack?
- Problemas relacionados con el uso de DP en android?