2011-01-27 27 views
78

Estoy tratando de tener un cuadro de diálogo personalizado que parece deslizarse hacia abajo desde una vista de texto. es posible? Parece que no puedo aplicar ninguna animación a la clase de diálogo. He intentado esta línea en el constructor, pero no tiene ningún efecto:Animar un cuadro de diálogo personalizado

this.getWindow(). SetWindowAnimations (R.anim.paranimation);

Ni siquiera estoy seguro de si la animación es correcta, pero podré ajustarla una vez que vea lo que está haciendo. Voy a enumerarlo a continuación por el bien de la integridad. No busco ayuda sobre la animación real, solo la aplicación al diálogo.

paranimation.xml:

<?xml version="1.0" encoding="utf-8"?> 
<translate 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:fromXDelta="-200%" 
    android:toXDelta="0%" 
    android:fromYDelta="200%" 
    android:toYDelta="0%" 
    android:duration="3000" 
    android:zAdjustment="top"> 
</translate> 
+3

Necesito saber esto también. Parece posible animar casi cualquier cosa, aparte de esto. ¿O estoy equivocado? –

Respuesta

180

He estado luchando con la animación de diálogo de hoy, por fin consiguió poner en funcionamiento el uso de estilos, por lo que aquí es un ejemplo.

Para empezar, lo más importante - Probablemente lo haya hecho funcionar de 5 formas diferentes hoy en día, pero no pude saberlo porque ... Si la configuración de animación de su dispositivo está configurada en "Sin animación" (Configuración → Pantalla → Animación) ¡entonces los diálogos no serán animados sin importar lo que hagas!

La siguiente es una versión reducida de mi styles.xml. Con suerte, se explica por sí mismo. Esto debe ubicarse en res/values.

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="PauseDialog" parent="@android:style/Theme.Dialog"> 
     <item name="android:windowAnimationStyle">@style/PauseDialogAnimation</item> 
    </style> 

    <style name="PauseDialogAnimation"> 
     <item name="android:windowEnterAnimation">@anim/spin_in</item> 
     <item name="android:windowExitAnimation">@android:anim/slide_out_right</item> 
    </style> 
</resources> 

El windowEnterAnimation es uno de mis animaciones y se encuentra en res\anim. El windowExitAnimation es una de las animaciones que forma parte del SDK de Android.

Luego cuando creo el cuadro de diálogo en mis actividades onCreateDialog(int id) método hago lo siguiente.

Dialog dialog = new Dialog(this, R.style.PauseDialog); 

// Setting the title and layout for the dialog 
dialog.setTitle(R.string.pause_menu_label); 
dialog.setContentView(R.layout.pause_menu); 

Alternativamente, podría establecer las animaciones de la siguiente manera en lugar de utilizar el constructor de cuadros de diálogo que toma un tema.

Dialog dialog = new Dialog(this); 
dialog.getWindow().getAttributes().windowAnimations = R.style.PauseDialogAnimation; 
+0

¡Una gran cosa! Me importaría poner código para @ anim/spin_in? – Neutralizer

+2

Ese fue solo un nombre que inventé para este ejemplo, nunca creé esa animación. – ChrisJD

+2

Muchas gracias por esta respuesta, está muy poco documentada, aunque encontré esta publicación a través de una pista de [Desarrolladores de Android] (http://groups.google.com/group/android-developers/browse_thread/thread/d28096a900b83f0c) grupo. –

42

He creado las animaciones Fade in y Fade Out para Dialogbox con el código ChrisJD.

  1. res Interior/style.xml

    <style name="AppTheme" parent="android:Theme.Light" /> 
    <style name="PauseDialog" parent="@android:style/Theme.Dialog"> 
        <item name="android:windowAnimationStyle">@style/PauseDialogAnimation</item> 
    </style> 
    
    <style name="PauseDialogAnimation"> 
        <item name="android:windowEnterAnimation">@anim/fadein</item> 
        <item name="android:windowExitAnimation">@anim/fadeout</item> 
    </style> 
    

  2. Dentro anim/fadein.xml

    <alpha xmlns:android="http://schemas.android.com/apk/res/android" 
        android:interpolator="@android:anim/accelerate_interpolator" 
        android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" /> 
    
  3. Dentro anim/fadeut.xml

    <alpha xmlns:android="http://schemas.android.com/apk/res/android" 
        android:interpolator="@android:anim/anticipate_interpolator" 
        android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" /> 
    
  4. MainActivity

    Dialog imageDiaglog= new Dialog(MainActivity.this,R.style.PauseDialog); 
    
+8

Puede usar las animaciones predeterminadas de Android '@android: anim/fade_in' '@android: anim/fade_out' – Marek

+0

La animación no parece funcionar en el diálogo. – portfoliobuilder

7

me encuentro con el mismo problema, pero, por fin resolver el problema ajeno seguida

((ViewGroup)dialog.getWindow().getDecorView()) 
.getChildAt(0).startAnimation(AnimationUtils.loadAnimation(
context,android.R.anim.slide_in_left)); 
+4

No es una respuesta sensata. Las vistas dentro del diálogo se animan – DJphy

14

Para derecha a izquierda (animación de entrada) y de izquierda a derecha (animación de salida):

styles.xml:

<style name="CustomDialog" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowAnimationStyle">@style/CustomDialogAnimation</item> 
</style> 

<style name="CustomDialogAnimation"> 
    <item name="android:windowEnterAnimation">@anim/translate_left_side</item> 
    <item name="android:windowExitAnimation">@anim/translate_right_side</item> 
</style> 

Crear dos archivos en res/animal /:

translate_right_side.xml:

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromXDelta="0%" android:toXDelta="100%" 
    android:fromYDelta="0%" android:toYDelta="0%" 
    android:duration="600"/> 

translate_left_side.xml:

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="600" 
    android:fromXDelta="100%" 
    android:toXDelta="0%"/> 

En ti Fragmento/Actividad:

Dialog dialog = new Dialog(getActivity(), R.style.CustomDialog); 
Cuestiones relacionadas