Анимация перехода TaskStackBuilder

Я использую переходы Android L, передающие ActivityOptions пакет в намерении. Как я могу воспроизвести анимацию с тем же намерением, что и TaskStackBuilder?

Это мой текущий метод работы с одним Intent:

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

Это моя попытка с TaskStackBuilder:

 TaskStackBuilder builder = TaskStackBuilder.create(this);
 builder.addNextIntentWithParentStack(myIntent);
 builder.startActivities(ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

Но анимация создает странный эффект, совсем не такой, как у «однонаправленной» версии.

Я также пробовал:

builder.addNextIntent(myIntent);

вместо:

builder.addNextIntentWithParentStack(myIntent);

person Giorgio Antonioli    schedule 24.11.2015    source источник
comment
Вы объявили родительскую активность в манифесте при использовании .addNextIntentWithParentStack()?   -  person Mibit    schedule 11.12.2015
comment
@Mibit нет, и я не могу этого сделать, потому что активность находится в отдельной библиотеке   -  person Giorgio Antonioli    schedule 11.12.2015


Ответы (2)


После того, как мы покопались в реализации TaskStackBuilder, проблема в том, что она принудительно добавляет Intent.FLAG_ACTIVITY_CLEAR_TASK к первому намерению в стеке, что создает этот странный эффект, поэтому используйте следующее, чтобы запустить стек:

Intent[] intents = TaskStackBuilder.create(this)
                     .addNextIntentWithParentStack(myIntent)
                     .getIntents();
if (intents.length > 0) {
    intents[0].setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);// Or any other flags you want, but not the `.._CLEAR_..` one
}
// `this` inside current activity, or you can use App's context
this.startActivities(intents, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

Идея здесь состоит в том, чтобы по-прежнему использовать TaskStackBuilder для создания стека ваших намерений, затем удалить странный Intent.FLAG_ACTIVITY_CLEAR_TASK, который TaskStackBuilder добавляет к 1-му намерению, а затем запустить действия вручную с использованием любого контекста, который вы хотите.

person AbdelHady    schedule 29.12.2019

Попробуйте сделать это с помощью:

TaskStackBuilder.create (Context context)

Верните новый TaskStackBuilder для запуска нового стека задач, состоящего из серии действий. Параметры -

Context context: контекст, который запустит новый стек задач или создаст PendingIntent.

Возвращает, TaskStackBuilder - новый TaskStackBuilder.

person RadFox    schedule 13.11.2016