弹出窗口动画不起作用。

12

我有一个漂亮的PopupWindow,我希望它以动画形式显示。我是这样做的:

popup.setAnimationStyle(R.anim.appear);
popup.showAtLocation(popupMenuLayout, gravity, offsetX, offsetY);

我随后设置了一个监听器来改变动画:

popup.setOnDismissListener(new PopupWindow.OnDismissListener(){
 @Override
 public void onDismiss(){
  popup.setAnimationStyle(R.anim.disappear);
 }      
}); 

但是,嘿,它不起作用。对于res/anim/appear也是如此:

<translate xmlns:android="http://schemas.android.com/apk/res/android"
 android:fromYDelta="100%"
 android:toYDelta="0"
 android:duration="1000" 
/>

也不适用于 res/anim/disappear:

<translate xmlns:android="http://schemas.android.com/apk/res/android"
 android:fromYDelta="0"
 android:toYDelta="100%"
 android:duration="1000"
/>

有任何线索吗?

1个回答

53

实际上,PopupWindow.setAnimationStyle 需要一个包含2个条目的样式。您需要有两个xml文件,每个文件都包含一个 <set>,一个用于显示窗口,另一个用于隐藏窗口。完成此操作后,请将以下内容放入 values/styles.xml:

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

只需将您的动画样式设置为 R.style.AnimationPopup,就可以了。

我从https://github.com/lorensiuswlt/NewQuickAction3D获取了这些信息,文档似乎没有提到它。

更新:

2012年Android SDK的更新已更改了XML语法。原来的@android:windowEnterAnimation现在变成了android:windowEnterAnimation。因此,此答案已相应地更新。


2
如果这个答案对您有帮助,不妨将其接受为答案。这样其他人就可以很容易地知道这个方法可行。 - Andro Selva
你的示例中有一个错误:应该是 "android:windowEnterAnimation" 而不是 "@android:windowEnterAnimation"。windowExitAnimation 也是同样的情况。 - Foxykeep
Android文档在某些方面确实很糟糕,感谢您提供非常好的建议! - Thibault D.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接