Android任务栈构建器(TaskStackBuilder)的过渡效果不佳

5

TaskStackBuilder有什么问题,会在启动新活动时使用这种丑陋的转换效果?

    TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(this)
            .addParentStack(ActivityB.class)
            .addNextIntent(new Intent(this, ActivityB.class));
    taskStackBuilder.startActivities();

这基本上是谷歌的标准代码,但是如果您运行此代码,当转到ActivityB时会看到一个非常丑陋的过渡效果。

我想这是因为它是一个新任务。但我不希望它看起来像这样,我能做些什么吗?

谢谢!


1
这与我的很旧的问题有点相关:https://dev59.com/MFsX5IYBdhLWcg3wY-kh - Giorgio Antonioli
1个回答

0
在深入研究了TaskStackBuilder的实现后,问题在于它强制将Intent.FLAG_ACTIVITY_CLEAR_TASK添加到堆栈中的第一个意图,从而导致了不美观的转换。因此,请使用以下内容来启动堆栈:
Intent[] intents = TaskStackBuilder.create(this)
            .addParentStack(ActivityB.class)
            .addNextIntent(new Intent(this, ActivityB.class))
            .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,然后手动使用任何您想要的上下文启动活动。

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