【问题标题】:TaskStackBuilder transition animationTaskStackBuilder 过渡动画
【发布时间】:2016-02-26 20:46:40
【问题描述】:

我正在使用 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 不,我不能这样做,因为活动在单独的库中

标签: android animation android-intent taskstackbuilder


【解决方案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,然后使用您想要的任何上下文手动启动活动。

【讨论】:

    【解决方案2】:

    尝试使用:

    TaskStackBuilder.create (Context context)
    

    返回一个新的 TaskStackBuilder 以启动一个由一系列活动组成的新任务栈。 参数 -

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

    返回,TaskStackBuilder - 一个新的 TaskStackBuilder。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      • 2016-03-16
      • 2018-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多