为自定义对话框设置动画

FML*_*Dev 93 animation alert android dialog

我试图让自定义对话框显示为从文本视图向下滑动.这可能吗?我似乎无法将任何动画应用于对话框类.我在构造函数中尝试过这一行,但它没有效果:

.this.getWindow()setWindowAnimations(R.anim.paranimation);

我甚至不确定动画是否正确,但是一旦我看到它正在做什么,我就能调整它.为了完整起见,我会在下面列出它.我不是在寻找实际动画的帮助,只是寻找对话框的应用程序.

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>
Run Code Online (Sandbox Code Playgroud)

Chr*_*sJD 210

我今天一直在努力使用Dialog动画,最后让它使用样式,所以这是一个例子.

首先,最重要的是 - 我今天可能以5种不同的方式工作,但无法分辨,因为......如果您的设备动画设置被设置为"无动画"(设置→显示→动画),则对话框赢了无论你做什么,都不要动画!

以下是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>
Run Code Online (Sandbox Code Playgroud)

windowEnterAnimation是我的动画之一,位于res\anim.这windowExitAnimation是Android SDK中的动画之一.

然后当我在我的活动onCreateDialog(int id)方法中创建Dialog时,我会执行以下操作.

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);
Run Code Online (Sandbox Code Playgroud)

或者,您可以通过以下方式设置动画,而不是使用带有主题的Dialog构造函数.

Dialog dialog = new Dialog(this);
dialog.getWindow().getAttributes().windowAnimations = R.style.PauseDialogAnimation;
Run Code Online (Sandbox Code Playgroud)

  • +1对于"如果您的设备动画设置设置为"无动画"(设置→显示→动画),则无论您做什么,对话框都不会生成动画!".我忘了检查那个. (3认同)
  • 这只是我为这个例子编写的名字,我从未真正创建过这个动画. (2认同)
  • 非常感谢这个答案,虽然我通过[Android开发者](http://groups.google.com/group/android-developers/browse_thread/thread/d28096a900b83f0c)小组的线索找到了这篇文章. (2认同)
  • 我面临的问题是,当我在显示对话框时最小化应用程序并再次还原应用程序时,对话框会再次设置动画,如何避免这种情况,保持其完美。+1 (2认同)

Aks*_*aru 50

我使用ChrisJD代码为Dialogbox创建了淡入和淡出动画.

  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>
    
    Run Code Online (Sandbox Code Playgroud)

  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" />
    
    Run Code Online (Sandbox Code Playgroud)
  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" />
    
    Run Code Online (Sandbox Code Playgroud)
  4. 主要活动

    Dialog imageDiaglog= new Dialog(MainActivity.this,R.style.PauseDialog);
    
    Run Code Online (Sandbox Code Playgroud)

  • 你可以使用默认的android fade动画'@android:anim/fade_in''@ android:anim/fade_out' (11认同)

vas*_*nth 18

从右到左(条目动画)和从左到右(退出动画):

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>
Run Code Online (Sandbox Code Playgroud)

在res/anim /中创建两个文件:

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"/>
Run Code Online (Sandbox Code Playgroud)

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%"/>
Run Code Online (Sandbox Code Playgroud)

在你片段/活动中:

Dialog dialog = new Dialog(getActivity(), R.style.CustomDialog);
Run Code Online (Sandbox Code Playgroud)


小智 15

首先,您必须在 res/anim 目录中创建两个动画资源

幻灯片_up.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
    android:duration="@android:integer/config_mediumAnimTime"
    android:fromYDelta="100%"
    android:interpolator="@android:anim/accelerate_interpolator"
    android:toXDelta="0">
</translate>
</set>
Run Code Online (Sandbox Code Playgroud)

幻灯片底部.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate 
    android:duration="@android:integer/config_mediumAnimTime" 
    android:fromYDelta="0%p" 
    android:interpolator="@android:anim/accelerate_interpolator" 
    android:toYDelta="100%p">
</translate>
</set>
Run Code Online (Sandbox Code Playgroud)

那么你必须创造一种风格

<style name="DialogAnimation">
    <item name="android:windowEnterAnimation">@anim/slide_up</item>
    <item name="android:windowExitAnimation">@anim/slide_bottom</item>
</style>
Run Code Online (Sandbox Code Playgroud)

并将这一行添加到您的班级

dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation; //style id
Run Code Online (Sandbox Code Playgroud)

基于http://www.devexchanges.info/2015/10/showing-dialog-with-animation-in-android.html


小智 13

我遇到了同样的问题,但最后我按照跟进的方式解决了问题

((ViewGroup)dialog.getWindow().getDecorView())
.getChildAt(0).startAnimation(AnimationUtils.loadAnimation(
context,android.R.anim.slide_in_left));
Run Code Online (Sandbox Code Playgroud)

  • 不是一个明智的答案.对话框内的视图会变为动画 (4认同)