如何在Android应用程序中一次性更改所有活动之间的转换?

48

我知道可以在startActivity()或finish()后使用以下代码来更改活动转换:

activity.overridePendingTransition(R.anim.activity_close_enter, R.anim.activity_close_exit);

但是,如果我的应用程序有十个活动,我必须这样做十次;而且修改起来很困难。所以我想知道是否有一种方法可以一次性为应用程序中的所有活动设置转换。在AndroidManifest.xml文件中是否有相应的配置项?

谢谢!

4个回答

64

您需要首先在res/styles.xml中创建一个<style>,就像这样:

    <style name="YourAnimation.Activity" parent="@android:style/Animation.Activity"> 
       <item name="android:windowEnterAnimation">@anim/your_in_down</item>
       <item name="android:windowExitAnimation">@anim/your_out_down</item>
    </style>

那么你可以在同一个文件中将样式应用于主题:

    <style name="YourTheme" parent="android:Theme.Translucent">
       ...
       <item name="android:windowAnimationStyle">@style/YourAnimation.Activity</item>
    </style>

最后,在清单文件中将主题应用于您的活动:

    <activity
        android:name=".YourActivity"
        android:theme="@style/YourTheme" />

参考以下链接:


29
它有效了!实际上,我稍微改了一下: - Gen Liu
1
@DavidLiu,打开动画看起来是有效的,但关闭动画没有生效。 - Etienne Lawlor
@GenLiu,你能给我展示一下你的XML示例吗?例如,我就看不出openexit和closeenter之间的区别。 - Renan Bandeira
非常感谢您的出色回答,帮了我很多! - JPM
对我来说可以用,但是必须删除 parent="android:Theme.Translucent",否则它就无法工作。谢谢。 - Weiyi
这对我似乎不起作用。每个页面都没有动画过渡。能帮忙吗? - Marvin

24

我知道这个问题已经有答案了,但以下是我的做法。我们仍然支持API 14,所以有一些动画效果缺失,我需要从API 22中将它们引入项目中(slide_in_right, slide_out_left)。这样做可以在打开新活动时滑动屏幕,并将关闭的屏幕向左滑出。当你按返回键时,它会相反地向左滑动前一个屏幕,并向右滑出当前屏幕。

<style name="YourTheme" parent="android:Theme.Translucent">
   ...
    <item name="android:windowAnimationStyle">@style/YourAnimation.Activity</item>
</style>

<style name="YourAnimation.Activity" parent="@android:style/Animation.Activity">
    <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item>
    <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item>
    <item name="android:activityCloseEnterAnimation">@android:anim/slide_in_left</item>
    <item name="android:activityCloseExitAnimation">@android:anim/slide_out_right</item>
</style>

这是直接从API 22库中获取的,只需下载API 22的源代码,它就会在动画文件夹中。 - JPM
1
非常简单和最容易的方法来进行屏幕转换,非常感谢 :) - Android is everything for me

2

步骤1:创建一个基础活动

步骤2:将所有活动扩展到此基础活动

步骤3:在您的基础活动中添加以下代码

@Override
protected void onStart() {
super.onStart();
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
}

@Override
protected void onPause() {
super.onPause();
if (isFinishing()) {
    overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out);
 }
}

非常好而且简单! - sebasira

0
My solution is mostly like of others...
 <style name="YourAnimation.Activity" parent="@android:style/Animation.Activity">
        <item name="android:windowEnterAnimation">@anim/slidefromright</item>
        <item name="android:windowExitAnimation">@anim/slidetoright</item>
    </style>
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowAnimationStyle">@style/YourAnimation.Activity </item>
    </style>


</resources>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接