2

我正在尝试新的 Android API,特别是新的动画。我有两个活动,并在第二个活动上使用了 setEnterTransition() 和 setExitTransition() 以及幻灯片转换。当我使用其中的按钮或使用后退按钮切换活动时,一切正常,但是当我在第二个活动上并按下主页按钮时,不会播放返回动画......

第二个活动 onCreate() 方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (getActionBar() != null) {
        getActionBar().setDisplayShowHomeEnabled(false);
        getActionBar().setDisplayHomeAsUpEnabled(true);
    }

    Slide slideTransition = new Slide();
    slideTransition.setDuration(1000);
    slideTransition.setSlideEdge(Gravity.RIGHT);

    getWindow().setEnterTransition(getSlideTransition(Gravity.RIGHT, 1000));
    getWindow().setExitTransition(getSlideTransition(Gravity.LEFT, 1000));

    getWindow().setAllowEnterTransitionOverlap(true);

    setContentView(R.layout.activity_second);

    //...
}

第一个活动被设置为清单中第二个活动的父级。

我找到了一些使用 overridePendingTransition() 方法的解决方案,但我想要一个使用新方法的解决方案(如果可能的话)。

谢谢!

4

1 回答 1

4

这是设计使然。返回转换仅在活动明确完成时触发(即您按下后退按钮或调用finishAfterTransition())。当您按下主页按钮时,您将应用程序置于后台,以便用户稍后可以返回到相同的活动。如果您在按下主页按钮时完成活动,用户会感到困惑,为什么他们稍后返回应用程序时没有被带到相同的活动。

值得一提的是,新的 Lollipop 转换 API并不是要取代overridePendingTransition(). 两者本质上是不同的。当您从一个活动切换到另一个活动时,Lollipop 转换 API 为您提供了一种单独为活动视图层次结构内的内容设置动画的方法。另一方面,overridePendingTranition()允许您在从屏幕添加或删除活动窗口时覆盖系统的默认窗口动画。换句话说,前者对活动窗口内的视图进行操作,而后者对整个活动窗口本身进行操作。

两者之间的最后一个主要区别是新的 Lollipop 转换 API 仅在属于同一任务的两个活动之间工作。如果您想在属于两个不同任务的两个活动之间导航时执行退出/进入动画,则需要overridePendingTransition()改用。

于 2014-12-18T01:20:41.377 回答