how to make animation for popup window in android

AndroidAndroid Popupwindow

Android Problem Overview


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;	
}

Android Solutions


Solution 1 - Android

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.

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

  2. 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.

Solution 2 - Android

i am using a popup animation with this code:

// 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);

located in /res/animator/popupanim.xml (popupanim.xml) the animation code is:

<?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>

Solution 3 - Android

The PopupWindow custom layout is more convenient, and the display position is freedom there is not any restricted. Use Below code and enjoy animation. In this animation use bottom slide in and slide out but you can change only slide in/out animation and animate any where in your app and one thing more according to your animation, you must to change your Gravity ->> BOTTOM, TOP etc.

anim resource folder:

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>

Style:

<style name="popup_window_animation">
        <item name="android:windowEnterAnimation">@anim/slide_in_bottom</item>
        <item name="android:windowExitAnimation">@anim/slide_out_bottom</item>
    </style>

Method:

 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;}
    }

Solution 4 - Android

This might be a bit late but the reason why the animation did not show is because you are showing the popupwindow before you set up your animation.

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

Reverse the two lines and you will see the animation:

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionIshaqView Question on Stackoverflow
Solution 1 - AndroidAndro SelvaView Answer on Stackoverflow
Solution 2 - AndroidaimilianoView Answer on Stackoverflow
Solution 3 - AndroidAvanish SinghView Answer on Stackoverflow
Solution 4 - AndroidSimonView Answer on Stackoverflow