父活动在退出转换时变为不可见

4

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

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

我已经在主视图和详细视图中启用了视图转换,像这样:

    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”。我认为这是当主视图被隐藏时 (转换开始时) 的情况。
我该怎么防止这种情况发生?
在这篇文章深入了解内容转换(第2部分)中,在“Content Transitions Under-The-Hood”和项目 1C下,它说:“框架将 A 中所有转换视图设置为 INVISIBLE。”
我认为这就是我的问题所在。我该怎么解决?

我想要实现类似这样的效果(从主页面到详情页面的过渡):http://www.christianpeeters.com/android-tutorials/tutorial-activity-slide-animation/#more-483 - mikeesouth
当动画速度更快时(例如,持续时间为300毫秒),它不太明显,但如果持续时间为2500毫秒,则很明显调用视图在退出动画完成之前消失。 - mikeesouth
3个回答

3
我曾遇到类似问题,在目标 Activity 的 onCreate 方法中,只需在调用 setContentView 之后添加以下代码即可解决问题:
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().setEnterTransition(null);
    }

2
当我使用ActivityOptionsCompat.makeSceneTransitionAnimation时,我遇到了同样的问题。我通过删除android:launchMode="singleInstance"这个activity标志来解决它。这可能是由于不同的任务不能使用过渡动画所造成的。

这解决了我遇到的问题,即子活动未显示。谢谢! - rsteckler

0

在我意识到我调用了supportPostponeEnterTransition()而没有调用supportStartPostponedEnterTransition()之前,我一直面临这个问题。我必须调用它们,因为我正在使用Glide加载图像。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接