2012-02-12 22 views
32

Tengo una ventana emergente en mi aplicación, aparece cuando hace clic en un botón Quiero configurar el desvanecimiento en la animación en esta ventana, Pongo el archivo xml en "res/anim" "carpeta y establecer el estilo de animación para la ventana emergente, pero la animación no funciona? aquí es mis códigos:cómo hacer una animación para una ventana emergente en android

myanim.xml ...

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <alpha android:fromAlpha="0.0" 
     android:toAlpha="1.0" 
     android:interpolator="@android:anim/accelerate_interpolator" 
     android:duration="4000" 
     android:repeatCount="1"/> 
</set> 

=========================== ====================

crear la ventana emergente

private PopupWindow showOptions(Context mcon){ 
    try{ 
     LayoutInflater inflater = (LayoutInflater) mcon.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     View layout = inflater.inflate(R.layout.options_layout,null); 
     layout.setAnimation(AnimationUtils.loadAnimation(this, R.anim.myanim)); 
     PopupWindow optionspu = new PopupWindow(layout, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 

     optionspu.setFocusable(true); 
     optionspu.showAtLocation(layout, Gravity.TOP, 0, 0); 
     optionspu.update(0, 0, LayoutParams.WRAP_CONTENT, (int)(hei/5)); 
     optionspu.setAnimationStyle(R.anim.myanim); 
     return optionspu; 
    } 
    catch (Exception e){e.printStackTrace(); 
    return null;} 
} 

=============== ================================== Método onClick ... (optionsPopup es una variable global del tipo PopupWindow)

@Override 
public void onClick(View v) { 
       switch (v.getId()) { 
     case R.id.options: 
       optionsPopup=showOptions(this); 
      break; 
} 

Respuesta

86

Creo que el problema es que ha proporcionado solo un conjunto de estilo de animación. Pero en realidad, un PopupWindow requiere dos animaciones. Uno será utilizado cuando se muestre la ventana y otro para ocultar la ventana.

Ésta es la forma en que debe hacerlo,

1) crear dos conjunto diferente de animaciones.

decir, popup_show.xml y popup_hide.xml y agregarlo a su anim carpeta que tiene que crear en el interior res carpeta.

2) Ahora dentro valores crear una carpeta llamada xml styles.xml y añadir estas animaciones para que de esta manera,

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

3) Ahora establece este estilo a su PopupWindow animación,

popup.setAnimationStyle(R.style.Animation); 

Ahora detecta automáticamente la ventana Entrar y salir y proporciona la animación requerida.

+0

Esto tiene que establecer antes showaslocation llamada a un método seguro.Pero de alguna manera, la ventana emergente se abre varias veces cada vez que hago clic en el botón, ¿hay alguna pista de por qué varias veces? – Ari

+0

@Ari resolvió un problema con doble animación? – Anton

+0

Logré deshacerme de la animación doble quitando android: repeatCount = "1" de la animación – NewestStackOverflowUser

11

estoy usando una animación emergente con este código:

// Creating the PopupWindow 
     layoutInflater = (LayoutInflater)  getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     inflatedLayoutView = layoutInflater.inflate(R.layout.packages_popup,null); 
    inflatedLayoutView.setAnimation(AnimationUtils.loadAnimation(this, R.animator.popupanim) 


    popup_l = new PopupWindow(inflatedLayoutView); 

    popup_l.setWidth(FrameLayout.LayoutParams.WRAP_CONTENT); 
    popup_l.setHeight(FrameLayout.LayoutParams.WRAP_CONTENT);  
    popup_l.setFocusable(true); 
    // Clear the default translucent background 
    popup_l.setBackgroundDrawable(new BitmapDrawable());  

    popup_l.showAtLocation(parent, Gravity.CENTER, 0 , 0); 

    popup_l.setOutsideTouchable(false); 

situado en /res/animator/popupanim.xml (popupanim.xml) el código de animación es:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" > 

<alpha android:fromAlpha="0.0" 
     android:toAlpha="1.0" 
     android:interpolator="@android:anim/accelerate_interpolator" 
     android:duration="500" 
     android:repeatCount="0"/> 
</set> 
5

Esto podría ser un poco tarde, pero la razón por la que la animación no se mostró es porque está mostrando la ventana emergente antes de configurar su animación.

optionspu.showAtLocation(layout, Gravity.TOP, 0, 0); 
optionspu.setAnimationStyle(R.anim.myanim); 

reversa de las dos líneas y verá la animación:

optionspu.setAnimationStyle(R.anim.myanim); 
optionspu.showAtLocation(layout, Gravity.TOP, 0, 0); 
Cuestiones relacionadas