为什么我的近距离活动动画在Android 4.0(ICS)上不起作用

时间:2012-07-12 12:32:42

标签: android animation themes android-4.0-ice-cream-sandwich

我用自定义动画制作了一个主题(向上滑动并向下滑动)。 动画在较旧的Android版本上运行良好.. 但是,当我在Android 4.0(ICS)上试用时,关闭动画不起作用。只有滑动动画才能在ICS上正常工作。

这是我用于动画的主题:

<style name="myTheme" parent="android:Theme.Black">
    <item name="android:windowTitleSize">45dip</item>
    <item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item>
    <item name="android:windowAnimationStyle">@style/myTheme.Window</item>
</style>

<style name="myTheme.Window" parent="@android:style/Animation.Activity">
    <item name="android:activityOpenEnterAnimation">@anim/push_up_in_no_alpha</item>
    <item name="android:activityOpenExitAnimation">@anim/no_anim</item>
    <item name="android:activityCloseEnterAnimation">@anim/no_anim</item>
    <item name="android:activityCloseExitAnimation">@anim/push_down_out_no_alpha</item>
</style>

这是 push_down_out_no_alpha.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromYDelta="0" android:toYDelta="100%p"
        android:duration="@android:integer/config_longAnimTime"/>
</set>

当我在代码中设置动画时,它也适用于ICS,但为什么不作为主题?

 this.overridePendingTransition(R.anim.no_anim,R.anim.push_down_out_no_alpha);

有谁知道为什么它不适用于Android 4.0(ICS)?

2 个答案:

答案 0 :(得分:4)

在ICS中指定清单中的动画似乎已被破坏:-( 覆盖动画解决方案工作正常,但您可能不想对动画进行硬编码。如同平台的其他版本一样,从清单中获取它们会很好..所以....

在您的活动中添加几个成员字段,以保存附加到您的活动的动画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);

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

答案 1 :(得分:2)

我也尝试过,但它不在这里工作。不知道是什么问题,但this.overridePendingTransition(R.anim.no_anim,R.anim.push_down_out_no_alpha);此代码工作正常