how to make animation for popup window in android

Ishaq picture Ishaq · Feb 12, 2012 · Viewed 69.9k times · Source

I hava a popup window in my application, its appears when some button clicked I want to set fade in animation to this window, I put the xml file in "res/anim" folder and set the animation style for the popup window but the animation does not work? here is my codes:

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>

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

Create the popup window

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 method... (optionsPopup is global variable of type PopupWindow)

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

Answer

Andro Selva picture Andro Selva · Sep 15, 2012

I think the problem is you have provided only one set of animation style. But actually a PopupWindow requires two animations. One will be used by it when window is shown and other one to hide the window.

This is how you should do it,

1) Create Two Different set of animations.

say, popup_show.xml and popup_hide.xml and add it to your anim folder which you have to create inside res folder.

2) Now inside values folder create a xml called styles.xml and add these animations to it like this,

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

3) Now set this style to your PopupWindow animation,

 popup.setAnimationStyle(R.style.Animation);

Now it automatically detects window enter and exit and provides with the required animation.