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

时间:2019-04-12 14:52:27

标签: android android-fragments shared-element-transition fragment-transitions

我正在使用Android X过渡为同一托管活动中两个片段之间的运动动画化内容。

我正在尝试为ImageView设置动画,该ImageView中装有Glide和URL。

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

我已经读过有关使用postponeEnterTransition()的信息,该信息应与startPostponedEnterTransition()结合使用,以延迟两次通话之间的过渡时间。

这是架构:

  • 片段A,图像在屏幕底部,宽度是屏幕宽度的一半。
  • 片段B,图像在屏幕顶部,宽度是屏幕宽度。

在片段A的图像上单击时,将加载片段B。

在片段B的onCreate中,我使用setSharedElementEnterTransition(transitions)设置了过渡效果。然后我立即致电postponeEnterTransition();

在片段B的onCreateView中,等待布局膨胀后,预先绘制ImageView(使用ViewTreeObserver),然后调用startPostponedEnterTransition()

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

另外,另一个证明postponeEnterTransition()无效的证据表明,删除对startPostponedEnterTransition()的调用不会永久保留过渡。

我做错了什么? 当然,当返回片段A时,也会播放相同的缩小动画...

1 个答案:

答案 0 :(得分:2)

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

有关更多上下文,请参见Android docsthis blog post by Chris Banes的Reordering部分。