我正在使用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 。

08-06 11:02