2012-02-12 40 views
32

弹出窗口的动画我在我的应用程序哈瓦一个弹出窗口,它的出现在某些按钮点击 我想动画淡入设置到这个窗口, 我把XML文件中的“RES /阿尼姆“文件夹并设置弹出窗口的动画样式,但动画不起作用? 这里是我的代码:如何使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> 

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

创建弹出窗口

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是类型PopupWindow的全局变量)

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

回答

86

我觉得问题是你只提供了一组动画风格。但实际上,一个PopupWindow需要两个动画。显示窗口时将使用其中一个,隐藏窗口时使用其中一个。

这是你应该怎么做,

1)创建两套不同的动画。

说,popup_show.xmlpopup_hide.xml,并把它添加到你不得不在屋里资源文件夹中创建您的阿尼姆文件夹。

2)现在里面文件夹中创建一个名为styles.xml xml和这些动画添加到像这样,

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

3)现在设置这种风格你PopupWindow动画,

popup.setAnimationStyle(R.style.Animation); 

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

+0

这有一定showaslocation方法调用之前设置。但不知何故,当我单击按钮时,弹出窗口会多次打开,任何线索为什么会多次? – Ari 2016-07-07 16:24:15

+0

@Ari你解决了双动画的问题吗? – Anton 2016-10-19 19:44:50

+0

我设法通过从动画中移除android:repeatCount =“1”来摆脱双重动画 – NewestStackOverflowUser 2016-11-25 23:39:05

11

我使用弹出动画与此代码:

// 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) 动画代码是:

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

这可能是有点晚了,但为什么动画没有显示的原因是因为你是显示您设置动画之前的popupwindow。

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

反转两条线,你会看到动画:

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