如何在android中为popup窗口制作animation

我在我的应用程序中有一个popup窗口,当点击某个button时出现,我想在这个窗口中设置淡入淡出的animation,我把XML文件放在“res / anim”文件夹中,并为popup窗口设置animation样式,但animation不起作用? 这里是我的代码:

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> 

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

创buildpopup窗口

 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方法…(optionsPopup是PopupWindowtypes的全局variables)

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

Solutions Collecting From Web of "如何在android中为popup窗口制作animation"

我觉得问题是你只提供了一套animation风格。 但实际上PopupWindow需要两个animation。 当窗口被显示时,一个将被它使用,另外一个隐藏窗口。

这是你应该怎么做的,

1)创build两个不同的animation集。

说, popup_show.xmlpopup_hide.xml ,并将其添加到您必须在res文件夹内创build的anim文件夹。

2)现在在文件夹中创build一个名为styles.xml的xml,并将这些animation添加到它像这样,

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

3)现在将此样式设置为PopupWindowanimation,

  popup.setAnimationStyle(R.style.Animation); 

现在它会自动检测窗口进入和退出,并提供所需的animation。

我正在使用此代码popupanimation:

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

位于/res/animator/popupanim.xml(popupanim.xml)中的animation代码是:

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

这可能有点晚,但animation没有显示的原因是因为在设置animation之前,您正在显示popupwindow。

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

反转两行,你会看到animation:

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