片段到片段的过渡:postponeEnterTransition() 不起作用

Fragment to Fragment Transition: postponeEnterTransition() does not work

我正在使用 Android X 转换在同一主机 Activity.

中通过两个片段之间的运动来制作动画内容

我正在尝试为一个 ImageView 设置动画,该图像加载了 Glide 和一个 URL。

我遇到的问题是,不管两个 ImageViews 的大小如何,在加载图像之前它们的大小都是 0,因此,过渡捕获了错误的布局值,因此显示了缩小的动画(动画大小为 0)。

我已经阅读了有关使用 postponeEnterTransition() 的信息,它应该与 startPostponedEnterTransition() 相关联地延迟两次调用之间的过渡。

这是架构:

点击 Fragment A 的图片,加载 Fragment B。

在片段 B 的 onCreate 中,我使用 setSharedElementEnterTransition(transitions) 设置了过渡。那我立马叫postponeEnterTransition();

在 Fragment B 的 onCreateView 中,我等待 ImageView 被预绘制(使用 ViewTreeObserver),在布局 inflation 之后,然后我调用 startPostponedEnterTransition()

在我的转换中使用断点和侦听器,在我到达预绘制回调之前触发了侦听器#onTransitionStarted,这证明转换捕获了错误的布局值。

此外,另一个证明 postponeEnterTransition() 没有任何效果的证据是,删除对 startPostponedEnterTransition() 的调用不会永远保持转换。

我做错了什么? 当然,回到Fragment A时,也在播放同样的缩小动画...

您应该通过将 setReorderingAllowed(true) 添加到您的交易来设置在您的片段交易期间允许重新排序。

有关更多上下文,请参阅 Android docs and the Reordering part of this blog post by Chris Banes