我有一个主题可以更改活动的打开/关闭/进入/退出动画:
<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上运行?
答案 0 :(得分:43)
我不确定为什么主题中设置的退出动画不能用于ICS +,但调用overridePendingTransition()
似乎正在运行。为您执行此操作的最简单方法可能是覆盖您的Activity中的finish()
:
@Override
public void finish() {
super.finish();
overridePendingTransition(R.anim.hold, R.anim.slide_out_bottom);
}
答案 1 :(得分:9)
我想补充一点这个答案;覆盖动画解决方案工作正常,但您可能不想对动画进行硬编码。如同平台的其他版本一样,从清单中获取它们会很好..所以....
在您的活动中添加几个成员字段,以保存附加到您的活动的动画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);
并且您的活动应该正确地遵守您在清单中活动附加的主题/样式中设置的动画。
答案 2 :(得分:1)
我也对这个问题感到困惑。但幸运的是不久之后我找到了答案。您应该检查动画文件的根元素是否为“Set”。如果不是,你应该用“Set”元素包装它,然后ActivityCloseAnimation属性可以正常工作。 我试过了。希望它可以帮到你。
答案 3 :(得分:0)
you shoud look here使用 overridePendingTransition 和 windowEnterAnimation / windowExitAnimation 为您工作