如何在Android中调用另一个活动时提供动画效果?

116

我有两个活动 A 和 B。当活动 A 调用 B 时,我想要缩小动画,当活动 B 调用 A 时,我想要最大化动画。对于此操作,我不需要动画 XML 文件。

在 Android 中调用另一个活动时,它会提供默认动画,然后调用缩小动画。

我希望的是默认动画不会发生,而我想要的动画应该发生。

我们实际上可以在调用另一个 Activity 时给出动画吗?

3个回答

152

从API 16开始,您可以在调用Context.startActivity(Intent, Bundle)或相关方法时提供活动选项包。它是通过ActivityOptions构建器创建的:

Intent myIntent = new Intent(context, MyActivity.class);
ActivityOptions options = 
   ActivityOptions.makeCustomAnimation(context, R.anim.fade_in, R.anim.fade_out);
context.startActivity(myIntent, options.toBundle());

如果你正在使用支持库,不要忘记查看ActivityOptions构建器的其他方法和ActivityOptionsCompat



API 5+:

对于针对API级别5+的应用程序,有Activities overridePendingTransition方法。它需要两个资源ID,用于传入和传出动画。 id为0将禁用动画。在startActivity调用之后立即调用此方法。

例如:

startActivity(new Intent(this, MyActivity.class));
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

API 3+:

使用Intent.FLAG_ACTIVITY_NO_ANIMATION标记可以防止默认动画(从右侧滑入)。

例如:

Intent myIntent = new Intent(context, MyActivity.class);
myIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
context.startActivity(myIntent);

那么在你的Activity中,你只需指定自己的动画即可。

这对于1.5 API(Level 3)也适用。


4
当你说“指定自己的动画”时,你是指什么?如何做到这一点?谢谢! - pqn
我有同样的问题。可能是在onResume和onPause中开启动画。 - Tima
有没有办法使用Animator呢? - android developer
在调用finish()之后,您也可以使用相同的内容! - thiagolr
“R.anim.fade_in”不是我们应该放在“res\anim”文件夹中的XML动画文件吗? - Ghasem

78

要实现此功能,您需要使用Activity类中的OverridePendingTransition方法。示例动画在apidemos示例的res/anim文件夹中。请查看它。不仅要查看ApiDemos/App/Activity/animation中的演示文稿。

示例:

@Override
public void onResume(){
    // TODO LC: preliminary support for views transitions
    this.overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left);
}

1
谢谢您的回复。方法overridePendingTransition从API级别5开始受支持,而我希望该应用程序支持Android 1.5。是否有其他方法可以提供从一个Activity到另一个Activity的动画效果? - sunil
5
太棒了!玩起来非常有趣。 - Someone Somewhere
@sunil 我和你有同样的问题。你能解决这个问题吗?使用 API 级别 3 或 4(而不是 5)进行动画。 - Dr.jacky
将动画代码保留在onResume()中会导致当用户退出应用并返回时动画播放。这在许多应用程序中并不理想。 - Vihaan Verma
我需要添加 super.onResume();,因为出现了以下错误提示:*"android.util.SuperNotCalledException: Activity {com.abc.MyActivity} did not call through to super.onResume()"* - Gene Bo

3

5
不再是毫无价值了 :) - Greg Ennis
如果你的目标版本是JellyBean之前,请使用ActivityOptionsCompat - Thuy Trinh

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