【问题标题】:Activity exit animations don't work as expected on Android 4.0Activity 退出动画在 Android 4.0 上无法正常工作
【发布时间】:2012-09-11 13:25:34
【问题描述】:

我有一个改变活动的打开/关闭/进入/退出动画的主题:

<style name="down_up_theme" parent="Theme.rtlfr">
    <item name="android:windowAnimationStyle">@style/down_up_animation</item>
</style>

<style name="down_up_animation" parent="@android:style/Animation.Activity">
    <item name="android:activityOpenEnterAnimation">@anim/slide_in_top</item>
    <item name="android:activityOpenExitAnimation">@anim/hold</item>
    <item name="android:activityCloseEnterAnimation">@anim/hold</item>
    <item name="android:activityCloseExitAnimation">@anim/slide_out_bottom</item>
</style>

在清单中:

<activity android:name=".activity.ArticlesActivity"
        android:theme="@style/down_up_theme" />

目标是让活动内容在开始时向下滑动,在退出时向上滑动。

动画在 2.3 上运行良好。但是,在 4.0 上,退出动画(向上滑动)不起作用。它所做的动画是关闭由此活动产生的活动。就我而言,我想使用文章列表为活动的结束设置动画,而不是文章详细信息的结束具有上滑动画。

我想我可以尝试将结束动画添加到产生我想要动画的活动的活动中,但它实际上产生的活动应该有不同的动画。我在documentation 中也找不到关于 2.3 与 4.0 差异的任何信息。

如何让我的动画在 4.0 上运行?

【问题讨论】:

  • 你有没有在你的xml中试过这个android:interpolator="@android:anim/accelerate_interpolator" android:shareInterpolator="true"

标签: android animation android-activity


【解决方案1】:

我不确定为什么主题中设置的退出动画在 ICS+ 上不起作用,但调用 overridePendingTransition() 似乎起作用了。为您执行此操作的最简单方法可能是在您的 Activity 中覆盖 finish()

@Override
public void finish() {
    super.finish();
    overridePendingTransition(R.anim.hold, R.anim.slide_out_bottom);
}

【讨论】:

  • 我同意@Joe overridePendingTransition() 在这里工作得很好,但我担心为什么它不能作为一个主题工作
  • 嗨,我在三星 Grand2 设备 kitkat 上遇到动画问题,该动画不显示。请帮我找出解决方案..
【解决方案2】:

我想在这个答案中补充一点;覆盖动画解决方案工作正常,但您可能不想对动画进行硬编码。从清单中获取它们会很好,就像从其他版本的平台获取它们一样......所以......

向您的活动添加几个成员字段以保存附加到您的活动的动画的 ID。

protected int activityCloseEnterAnimation;
protected int activityCloseExitAnimation;

在你的 onCreate 中的某个地方...

// Retrieve the animations set in the theme applied to this activity in the
// manifest..
TypedArray activityStyle = getTheme().obtainStyledAttributes(new int[] {android.R.attr.windowAnimationStyle});
int windowAnimationStyleResId = activityStyle.getResourceId(0, 0);      
activityStyle.recycle();

// Now retrieve the resource ids of the actual animations used in the animation style pointed to by 
// the window animation resource id.
activityStyle = getTheme().obtainStyledAttributes(windowAnimationStyleResId, new int[] {android.R.attr.activityCloseEnterAnimation, android.R.attr.activityCloseExitAnimation});
activityCloseEnterAnimation = activityStyle.getResourceId(0, 0);
activityCloseExitAnimation = activityStyle.getResourceId(1, 0);
activityStyle.recycle();

那么无论您的活动完成/应该应用动画的地方包括...

overridePendingTransition(activityCloseEnterAnimation, activityCloseExitAnimation);

并且您的活动应该正确地遵循您在清单中附加到活动的主题/样式中设置的动画。

【讨论】:

    【解决方案3】:

    我也被这个问题弄糊涂了。但幸运的是不久之后我找到了答案。您应该检查动画文件的根元素是否为“Set”。如果不是,你应该用“Set”元素包装它,然后 ActivityCloseAnimation 属性就可以正常工作。 我试过了。希望对你有帮助。

    【讨论】:

      【解决方案4】:

      you shoud look here 使用 overridePendingTransitionwindowEnterAnimation/windowExitAnimation 应该适合你

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-18
        相关资源
        最近更新 更多