android - quitar - ventana emergente whatsapp
cómo hacer una animación para la ventana emergente en Android (4)
Creo que el problema es que has proporcionado solo un conjunto de estilo de animación. Pero en realidad, una PopupWindow
requiere dos animaciones. Uno será utilizado cuando se muestre la ventana y otro para ocultar la ventana.
Así es como debes hacerlo,
1) Crea dos conjuntos diferentes de animaciones.
por ejemplo, popup_show.xml y popup_hide.xml y agréguelo a su carpeta anim que debe crear dentro de la carpeta res .
2) Ahora dentro de la carpeta de valores crea un xml llamado styles.xml y agrégale estas animaciones 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 en tu animación de PopupWindow
,
popup.setAnimationStyle(R.style.Animation);
Ahora detecta automáticamente Window Enter and Exit y proporciona la animación requerida.
Tengo una ventana emergente en mi aplicación, aparece cuando se hace clic en un botón Quiero configurar la animación en esta ventana, pongo el archivo xml en la carpeta "res / anim" y establezco el estilo de animación para la ventana emergente, pero la animación ¿No funciona? aquí están mis códigos:
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;}
}
============================================== OnClick método ... (optionsPopup es una variable global de tipo PopupWindow)
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.options:
optionsPopup=showOptions(this);
break;
}
El diseño personalizado de PopupWindow es más conveniente, y la posición de visualización es libertad, no hay ninguna restricción. Use el código a continuación y disfrute de la animación. En esta animación, use la diapositiva deslizante hacia adentro y deslícela hacia afuera, pero puede cambiar solo la animación deslizante de entrada / salida y animar en cualquier lugar de su aplicación y una cosa más según su animación, debe cambiar su Gravedad - >> INFERIOR, SUPERIOR, etc.
carpeta de recursos anim:
1.slide_in_bottom.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
>
<translate
android:duration="@integer/dialogplus_animation_default_duration"
android:fromXDelta="0%"
android:fromYDelta="100%"
android:toXDelta="0%"
android:toYDelta="0%"
/>
</set>
2.slide_out_bottom.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
>
<translate
android:duration="@integer/dialogplus_animation_default_duration"
android:fromXDelta="0%"
android:fromYDelta="0%"
android:toXDelta="0%"
android:toYDelta="100%"
/>
</set>
Estilo:
<style name="popup_window_animation">
<item name="android:windowEnterAnimation">@anim/slide_in_bottom</item>
<item name="android:windowExitAnimation">@anim/slide_out_bottom</item>
</style>
Método:
private PopupWindow showOptions(Context mcon){
try{
LayoutInflater inflater = (LayoutInflater) mcon.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.popup_option_documents_type,null);
PopupWindow optionspu = new PopupWindow(layout, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
optionspu.setAnimationStyle(R.style.popup_window_animation);
optionspu.setBackgroundDrawable(new ColorDrawable(Color.WHITE));
optionspu.setFocusable(true);
optionspu.setOutsideTouchable(true);
optionspu.update(0, 0, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
optionspu.showAtLocation(layout, Gravity.BOTTOM, 0, 0);
return optionspu;
}
catch (Exception e){e.printStackTrace();
return null;}
}
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);
Invierta las dos líneas y verá la animación:
optionspu.setAnimationStyle(R.anim.myanim);
optionspu.showAtLocation(layout, Gravity.TOP, 0, 0);
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);
ubicado en /res/animator/popupanim.xml (popupanim.xml) el código de la 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>