我正在使用Android L过渡,目的是传递ActivityOptions
bundle 包。
如何使用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);
最佳答案
在深入了解TaskStackBuilder
的实现之后,问题在于它迫使将Intent.FLAG_ACTIVITY_CLEAR_TASK
添加到堆栈中的第一个intent中,这产生了奇怪的效果,因此请使用以下内容启动堆栈:
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
,然后使用所需的任何上下文手动启动 Activity 。