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\animwindowExitAnimation是属于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。

  1. 里面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> 

  2. 在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" /> 
  3. 在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" /> 
  4. 主要活动

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