animation自定义对话框
我试图让一个自定义的对话框出现,就好像它从文本视图滑下来一样。 这可能吗? 我似乎无法将任何animation应用到对话框类。 我已经在构造函数中尝试了这一行,但它没有任何作用:
。this.getWindow()setWindowAnimations(R.anim.paranimation);
我甚至不确定animation是否正确,但是一旦我看到它在做什么,我就可以调整它。 为了完整起见,我将在下面列出。 我没有在实际的animation上寻找帮助,只是在对话框中的应用程序。
paranimation.xml:
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="-200%" android:toXDelta="0%" android:fromYDelta="200%" android:toYDelta="0%" android:duration="3000" android:zAdjustment="top"> </translate>
我一直在努力与今天的对话animation,最后得到它使用样式,所以这里是一个例子。
首先,最重要的事情 – 我可能有5种不同的方式今天工作,但不能告诉,因为…如果您的设备animation设置设置为“无animation”(设置→显示→animation),那么对话赢不pipe你做什么,都不会animation。
以下是我的styles.xml的精简版本。 希望这是不言自明的。 这应该位于res/values
。
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="PauseDialog" parent="@android:style/Theme.Dialog"> <item name="android:windowAnimationStyle">@style/PauseDialogAnimation</item> </style> <style name="PauseDialogAnimation"> <item name="android:windowEnterAnimation">@anim/spin_in</item> <item name="android:windowExitAnimation">@android:anim/slide_out_right</item> </style> </resources>
windowEnterAnimation
是我的一个animation,位于res\anim
。 windowExitAnimation
是属于Android SDK的animation之一。
然后,当我在我的活动onCreateDialog(int id)
方法中创build对话框时,我执行以下操作。
Dialog dialog = new Dialog(this, R.style.PauseDialog); // Setting the title and layout for the dialog dialog.setTitle(R.string.pause_menu_label); dialog.setContentView(R.layout.pause_menu);
或者,您可以使用以下方法设置animation,而不是使用带有主题的对话框构造函数。
Dialog dialog = new Dialog(this); dialog.getWindow().getAttributes().windowAnimations = R.style.PauseDialogAnimation;
我已经使用ChrisJD代码创build了对话框的淡入和淡出animation。
-
里面res / style.xml
<style name="AppTheme" parent="android:Theme.Light" /> <style name="PauseDialog" parent="@android:style/Theme.Dialog"> <item name="android:windowAnimationStyle">@style/PauseDialogAnimation</item> </style> <style name="PauseDialogAnimation"> <item name="android:windowEnterAnimation">@anim/fadein</item> <item name="android:windowExitAnimation">@anim/fadeout</item> </style>
-
在anim / fadein.xml里面
<alpha xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator" android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" />
-
在anim / fadeut.xml中
<alpha xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/anticipate_interpolator" android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" />
-
主要活动
Dialog imageDiaglog= new Dialog(MainActivity.this,R.style.PauseDialog);
从右到左(进入animation)和从左到右(退出animation):
styles.xml:
<style name="CustomDialog" parent="@android:style/Theme.Dialog"> <item name="android:windowAnimationStyle">@style/CustomDialogAnimation</item> </style> <style name="CustomDialogAnimation"> <item name="android:windowEnterAnimation">@anim/translate_left_side</item> <item name="android:windowExitAnimation">@anim/translate_right_side</item> </style>
在res / anim /中创build两个文件
translate_right_side.xml:
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="0%" android:toXDelta="100%" android:fromYDelta="0%" android:toYDelta="0%" android:duration="600"/>
translate_left_side.xml:
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="600" android:fromXDelta="100%" android:toXDelta="0%"/>
在你片段/活动:
Dialog dialog = new Dialog(getActivity(), R.style.CustomDialog);
我遇到了同样的问题,但是最后我按照这个方法解决了这个问题
((ViewGroup)dialog.getWindow().getDecorView()) .getChildAt(0).startAnimation(AnimationUtils.loadAnimation( context,android.R.anim.slide_in_left));