在Android 4.0作为预期的活动退出动画不工作(Activity exit animation

2019-07-31 12:15发布

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

<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,虽然,退出动画(向上滑动)不起作用。 它所做的动画是从这项活动催生了活动的结束。 在我的情况,我想用动画的文章列表活动的结束,而不是文章细节的收盘有滑动画。

我想我可以尝试关闭动画添加到衍生为一个我想动画的活动,但它实际上是派生应该有不同的动画活动。 我也找不到这个2.3与4.0的区别中的任何信息资料 。

我怎样才能让我的动画在4.0的工作?

Answer 1:

我不知道为什么退出动画主题设置是不工作的ICS +,但调用overridePendingTransition()似乎是工作。 为你做这个最简单的方法可能是重写finish()在你的活动:

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


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

和你的活动应该正确履行您在连接到活动中您的清单主题/样式设置动画。



Answer 3:

我被这个问题困惑了。 不过幸运的是不久后,我找到了答案了。 您应该检查你的动画文件,它的根元素是否在“设置”与否。 如果不是的话,你应该把它包“SET”元素,然后ActivityCloseAnimation属性将正常工作。 我已经尝试过了。 希望它可以帮助你。



Answer 4:

你看768,16这里使用overridePendingTransitionwindowEnterAnimation / windowExitAnimation 768,16为你工作



文章来源: Activity exit animations don't work as expected on Android 4.0