'setEnterTransition' работает только с ' ActivityCompat.startActivity`

Я хочу добавить переход enter к следующему действию.

Так я и сделал:

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 ответов


взято из документации разработчиков android:

запустить действие с помощью переходов Если включить переходы и установить переход выхода для действия, переход активируется при запуске другого действия следующим образом:

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

Если вы установили переход enter для второго действия, переход также активируется при запуске действия. Чтобы отключить переходы, когда вы запускаете другое действие, предоставляете пакет null options.

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

поэтому сначала включите переходы, как вы уже делаете, как показано ниже:

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

а затем начать деятельность следующим образом:

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

вы можете добавить переход при вызове намерения, как это

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