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

`setEnterTransition` only works with `ActivityCompat.startActivity`

我想为下一个 activity 添加一个进入过渡。

所以我做到了:

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' 添加为共享元素。

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

您可以像这样在调用 Intent 时添加转换

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);

摘自 android 开发者文档:

Start an activity using transitions If you enable transitions and set an exit transition for an activity, the transition is activated when you launch another activity as follows:

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

If you have set an enter transition for the second activity, the transition is also activated when the activity starts. To disable transitions when you start another activity, provide a null options bundle.

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

所以首先像下面这样启用转换:

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

然后开始activity如下:

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