1

我正在使用 Android X 转换在同一个托管 Activity 中通过两个片段之间的运动为内容设置动画。

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

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

我已经阅读了关于使用postponeEnterTransition()which should 与startPostponedEnterTransition()延迟两个呼叫之间持续时间的转换相关的内容。

这是架构:

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

在片段 A 的图像点击时,片段 B 被加载。

在片段 B 中onCreate,我使用setSharedElementEnterTransition(transitions). 然后我立即打电话postponeEnterTransition()

在 Fragment BonCreateView中,在布局膨胀之后,我等待 ImageView 被预先绘制(使用 ViewTreeObserver),然后我调用startPostponedEnterTransition().

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

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

我究竟做错了什么 ?当然,当回到片段A时,同样的收缩动画也在播放……

4

1 回答 1

4

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

有关更多上下文,请参阅Android 文档和Chris Banes的这篇博文的重新排序部分。

于 2019-04-24T09:00:50.147 回答