我正在使用 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时,同样的收缩动画也在播放……