`setEnterTransition`仅适用于`ActivityCompat.startActivity`

时间:2016-06-03 07:03:10

标签: android android-transitions

我想在下一个活动中添加一个输入转换。

所以我做了:

getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
window.setEnterTransition(new Slide());

这似乎不起作用。做了一些试验和错误(因为我有其他活动的转换)我发现它在调用后确实有效

ActivityOptionsCompat activityOptionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, view, "some_name");
ActivityCompat.startActivity(activity, new Intent(TourAndLoginActivity.this, LoginActivity.class), activityOptionsCompat.toBundle());

但是我没有共享元素(我添加了一个视图来测试它)。 无法将'null'添加为共享元素。

这样做真的是强制性的吗?我的解决方法是添加一个不可见的共享元素。

2 个答案:

答案 0 :(得分:9)

取自Android开发者文档:

  
    

使用过渡启动活动     如果启用转换并为活动设置退出转换,则在启动另一个活动时会激活转换,如下所示:

  
startActivity(intent,
          ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
  
    

如果您为第二个活动设置了输入转换,则活动开始时也会激活转换。要在启动另一个活动时禁用转换,请提供空选项包。

  

https://developer.android.com/training/material/animations.html

首先启用转换,如下所示:

getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
window.setEnterTransition(new Slide());

然后按如下方式启动活动:

startActivity(intent,
          ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

答案 1 :(得分:0)

您可以在调用此方法时添加转换

Intent i = new Intent(context, SampleActivity.class);
i.putExtra("data", data);
startActivity(i);
context.overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);