我有两个活动 A 和 B。当活动 A 调用 B 时,我想要缩小动画,当活动 B 调用 A 时,我想要最大化动画。对于此操作,我不需要动画 XML 文件。
在 Android 中调用另一个活动时,它会提供默认动画,然后调用缩小动画。
我希望的是默认动画不会发生,而我想要的动画应该发生。
我们实际上可以在调用另一个 Activity 时给出动画吗?
我有两个活动 A 和 B。当活动 A 调用 B 时,我想要缩小动画,当活动 B 调用 A 时,我想要最大化动画。对于此操作,我不需要动画 XML 文件。
在 Android 中调用另一个活动时,它会提供默认动画,然后调用缩小动画。
我希望的是默认动画不会发生,而我想要的动画应该发生。
我们实际上可以在调用另一个 Activity 时给出动画吗?
从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)也适用。
要实现此功能,您需要使用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);
}
super.onResume();
,因为出现了以下错误提示:*"android.util.SuperNotCalledException: Activity {com.abc.MyActivity} did not call through to super.onResume()"* - Gene BoJelly Bean通过ActivityOptions.makeCustomAnimation()方法增加了对此的支持。当然,由于它只在Jelly Bean上可用,实际上对实际用途几乎没有价值。
ActivityOptionsCompat
。 - Thuy Trinh