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

Posted

技术标签:

【中文标题】在Android中调用另一个活动时如何提供动画?【英文标题】:How to provide animation when calling another activity in Android? 【发布时间】:2011-02-08 17:32:24 【问题描述】:

我有两个活动 A 和 B。我想在什么时候有收缩动画 Activity A 调用 B 并在 Activity B 调用 A 时最大化动画。我不需要动画 xml 文件。

当我们在 android 中调用另一个 Activity 时,它会给出其默认动画,然后它会调用收缩动画。

我想要的是默认动画不应该出现,我想要的动画应该出现。

我们真的可以在调用另一个Activity时给动画吗?

【问题讨论】:

【参考方案1】:

你必须使用 OverridePendingTransition 方法来实现它,它在Activity class 中。 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);

【讨论】:

感谢您的回复。 API 级别 5 支持 overridePendingTransition 方法,我希望 Android 1.5 支持该应用程序。有没有其他方法可以将动画从一个 Activity 提供给另一个。 太棒了!玩起来很有趣 @sunil 我有和你一样的问题。你能解决这个问题吗?api 级别 3 或 4(不是 5)的动画 在 onResume() 中保留动画代码将导致当用户离开应用程序并返回时播放动画。在许多应用中并不理想。 我需要添加 super.onResume();,得到:"android.util.SuperNotCalledException: Activity com.abc.MyActivity 没有调用 super.onResume()"我>【参考方案2】:

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

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+ 的应用,有活动 overridePendingTransition 方法。传入和传出动画需要两个资源 ID。 0 的 id 将禁用动画。在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(级别 3)。

【讨论】:

你说“指定你自己的动画”是什么意思?你怎么做到这一点?谢谢! 我也有同样的问题。可能在 onResume 和 onPause 的开始动画中。 有没有办法用Animator来代替? 调用finish()后也可以使用同样的方法! R.anim.fade_in 不还是一个我们在res\anim 中应该有的 xml 文件动画吗?【参考方案3】:

编写了一个教程,以便您可以为活动的进出设置动画,

享受:

http://blog.blundellapps.com/animate-an-activity/

【讨论】:

【参考方案4】:

Jelly Bean 通过ActivityOptions.makeCustomAnimation() 方法添加了对此的支持。当然,由于它只是在 Jelly Bean 上,因此对于实际用途来说几乎毫无价值。

【讨论】:

它不再一文不值了:) 如果您的目标是 pre-JellyBean,请使用 ActivityOptionsCompat

以上是关于在Android中调用另一个活动时如何提供动画?的主要内容,如果未能解决你的问题,请参考以下文章

当活动在android中启动时如何隐藏软键盘?

如何在Android中给出从上到下的动画?

Android:从片段调用时如何从活动中获取返回结果?

android asynctask导致另一个活动

离开活动去另一个活动时,Xamarin Android Finalizer 没有被调用

Android 中的两部分过渡动画:将一个 textview 向左滑出,并从右侧引入另一个