2011-09-15 18 views
11

Tengo una bonita ventana emergente que quiero que aparezca con una animación. Lo hago así:La animación de PopupWindow no funciona

popup.setAnimationStyle(R.anim.appear); 
popup.showAtLocation(popupMenuLayout, gravity, offsetX, offsetY); 

I a continuación, establecer un oyente para cambiar la animación:

popup.setOnDismissListener(new PopupWindow.OnDismissListener(){ 
@Override 
public void onDismiss(){ 
    popup.setAnimationStyle(R.anim.disappear); 
}  
}); 

Pero, bueno, no va a funcionar. Ninguno de res/animal/aparecer:

<translate xmlns:android="http://schemas.android.com/apk/res/android" 
android:fromYDelta="100%" 
android:toYDelta="0" 
android:duration="1000" 
/> 

Ni para res/animal/desaparecer:

<translate xmlns:android="http://schemas.android.com/apk/res/android" 
android:fromYDelta="0" 
android:toYDelta="100%" 
android:duration="1000" 
/> 

Alguna pista?

Respuesta

49

En realidad, PopupWindow.setAnimationStyle espera un estilo con 2 entradas. Tendrá que tener dos xmls, cada uno con un <set>, uno para mostrar y el otro para ocultar la ventana. Cuando se hace esto, se puso la siguiente pieza en valores/styles.xml:

<style name="AnimationPopup"> 
    <item name="android:windowEnterAnimation">@anim/popup_show</item> 
    <item name="android:windowExitAnimation">@anim/popup_hide</item> 
</style> 

y establecer su estilo de animación a R.style.AnimationPopup. Eso servirá.

Tengo esta información de https://github.com/lorensiuswlt/NewQuickAction3D, la documentación no parece mencionarlo.

Actualización:

Una actualización a Android SDK en 2012 han cambiado la sintaxis XML. El original @android:windowEnterAnimation ahora se convirtió en android:windowEnterAnimation. Entonces esta respuesta se actualiza en consecuencia.

+0

Gracias! Voy a intentar esto – slipbull

+0

¡Gracias! Tu sugerencia funcionó para mí. – kgiannakakis

+2

¿Qué hay de aceptar esto como la respuesta si te ha ayudado? Para que alguien más pueda llegar a saber fácilmente que esto funciona. –

Cuestiones relacionadas