我正在使用Android X过渡来在同一个托管活动中的两个片段之间运动动画内容。
我试图动画一个ImageView,其中Image加载了Glide和一个URL。
我遇到的问题是,无论两个ImageViews大小如何,在加载图像之前它们的大小都是0,因此,转换会捕获错误的布局值,因此会显示缩小的动画(动画缩小为0)。
我已经阅读过关于使用postponeEnterTransition()
的内容,它应该与startPostponedEnterTransition()
相关联,延迟两次调用之间持续时间的转换。
这是架构:
在片段A的图像单击上,加载片段B.
在片段B的onCreate
中,我使用setSharedElementEnterTransition(transitions)
设置我的过渡。然后我马上打电话给postponeEnterTransition()
;
在Fragment B的onCreateView
中,我等待ImageView预先绘制(使用ViewTreeObserver),布局通胀后,然后我调用startPostponedEnterTransition()
。
在我的转换上使用断点和监听器,在我到达预绘制回调之前触发了#onTransitionStarted监听器,这证明转换捕获了错误的布局值。
此外,postponeEnterTransition()
没有任何影响的另一个证据,取消对startPostponedEnterTransition()
的呼吁并不能永远保持过渡。
我究竟做错了什么 ?当然,当回到片段A时,同样正在播放同样缩小的动画......
您应该在片段交易期间通过将setReorderingAllowed(true)
添加到您的交易中来设置允许的重新排序。
有关更多背景信息,请参阅Android docs和this blog post by Chris Banes的重新排序部分。