4

有没有办法反转活动动画的 z 顺序?基本上,当您开始新活动时,它会被添加到后台堆栈中,并且它的窗口会添加到前一个活动的窗口上。有时稍后返回时,从后台堆栈中获取的活动会在顶部活动下方显示其窗口。大多数时候它是完全有道理的,但我对这种行为有以下问题。

我有一个小部件,它指向应用程序结构的深处。因此,当用户单击操作栏中的向上按钮时,我必须手动创建后退堆栈。但后来我实际上调用 startActivity ,新的意图指向一个新的活动,并附有后堆栈..在这里我们解决问题..活动实际上是从顶部动画,而不是像往常一样从后堆栈弹出动画标准方式。

您可以在下图中看到流程 在此处输入图像描述

这是我如何重新创建任务返回堆栈并将用户导航到父活动的代码片段。同样在下方,您可以看到动画的屏幕截图。基本上,顶部的窗口应该在底部(在应用程序层次结构中较高)。仅供参考,所有这些动画都是通过标准 XML 窗口动画完成的,并通过 overridePendingTransition 调用触发。我试图在这些动画中修改 z 调整,但它似乎只影响一个特定动画中的各个层..

if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
       NavUtils.navigateUpTo(this, upIntent);
} else {
      TaskStackBuilder.create(this)
                        .addNextIntentWithParentStack(upIntent)
                        .startActivities();

}

在此处输入图像描述

4

1 回答 1

1

老问题,但我遇到了同样的问题。解决方案是添加属性android:zAdjustment="top"android:zAdjustment="bottom"在我们的动画定义中。例子:

nothing_background.xml

<?xml version="1.0" encoding="utf-8"?>
  <translate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:zAdjustment="bottom"
    android:duration="400"
    android:fromXDelta="0%p"
    android:toXDelta="0%p" >
  </translate>

fade_in_foreground.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:zAdjustment="top">
    <alpha
        android:fromAlpha="0.0"
        android:toAlpha="1.0"
        android:interpolator="@android:anim/accelerate_interpolator"
        android:duration="400" />
</set>

在您触发转换的代码中:

Intent intent = new Intent(FromActivity.this, ToActivity.class);
Bundle animate = ActivityOptions.makeCustomAnimation(getApplicationContext(),
  R.anim.nothing_background, R.anim.fade_in_foreground).toBundle();
startActivity(intent, animate);
于 2017-04-22T12:59:47.843 回答