任务栈构建器的过渡动画

54

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

当您使用.addNextIntentWithParentStack()时,您是否在清单文件中声明了父活动? - Mibit
@Mibit 不行,我做不到,因为这个活动在一个单独的库中。 - Giorgio Antonioli
2个回答

1
在深入研究 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来创建您的意图堆栈,然后删除TaskStackBuilder添加到第一个意图的奇怪的Intent.FLAG_ACTIVITY_CLEAR_TASK,然后手动使用任何您想要的上下文启动活动。

0

尝试使用以下方法:

TaskStackBuilder.create (Context context)

返回一个新的TaskStackBuilder,用于启动由一系列活动组成的新任务堆栈。

参数 -

Context context: 启动新任务堆栈或生成PendingIntent的上下文。

返回TaskStackBuilder - 一个新的TaskStackBuilder。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接