更改Android上活动动画的z顺序

时间:2013-10-28 08:59:05

标签: android android-intent navigation back-stack

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

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

您可以在下图中看到流程 enter image description here

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

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

}

enter image description here

1 个答案:

答案 0 :(得分:0)

老问题,但我遇到了同样的问题。解决方案是在动画定义中添加属性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);