4

我正在使用 API 级别 21,在 Nexus 6 上进行测试。

我有两个活动:master + detail,每个视图都有一个片段。当我在主列表中选择一个项目时,它会转换到详细视图。

我在主视图和细节视图中都启用了视图转换,如下所示:

    getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);

    Transition ts = new Slide(Gravity.RIGHT);
    ts.setDuration(2500);
    getWindow().setEnterTransition(ts);
    getWindow().setExitTransition(ts);

    getWindow().setAllowEnterTransitionOverlap(true);
    getWindow().setAllowReturnTransitionOverlap(true);

过渡动画按预期工作,除了一件事:当我选择一个项目时,父活动在过渡时被隐藏,所以我看不到它。当我按回时,详细视图被转出(不隐藏)并且主视图被转入(不隐藏)。那么为什么主视图在转出而细节视图转入时隐藏呢?

在 Android Studio 中,我看到几个日志帖子,例如:

changeCanvasOpacity: opaque=true
changeCanvasOpacity: opaque=false
changeCanvasOpacity: opaque=false
changeCanvasOpacity: opaque=false

前两行用于第一次转换(master => detail),后两行返回(detail => master)。如您所见,只有一行是“opaque = true”。我相信那是主视图被隐藏的时候(随着过渡开始)。

我怎样才能防止这种情况?

在这篇文章Content Transitions In-Depth (part 2)中,在“Content Transitions Under-The-Hood”和第 1C 项下,它说“框架将 A 中的所有转换视图设置为 INVISIBLE。”。

我相信这是我的问题。我该如何解决这个问题?

4

3 回答 3

3

我有一个类似的问题,并在目标 Activity 的 onCreate 中通过在调用 setContentView 之后添加此代码段来解决它:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().setEnterTransition(null);
    }
于 2017-02-16T07:12:29.443 回答
2

我在使用时遇到了同样的问题,我ActivityOptionsCompat.makeSceneTransitionAnimation. 通过删除活动标志解决了它:android:launchMode="singleInstance" 它可能是由于不同的任务无法使用翻译动画造成的。

于 2016-02-29T13:36:55.970 回答
0

在我意识到我supportPostponeEnterTransition()没有打电话之前,我就遇到了这个问题supportStartPostponedEnterTransition()。我不得不调用这些,因为我使用 Glide 来加载图像。

于 2017-10-14T13:16:06.170 回答