【发布时间】:2019-04-12 14:52:27
【问题描述】:
我正在使用 Android X 过渡在同一个托管 Activity 中通过两个片段之间的运动为内容设置动画。
我正在尝试为 ImageView 设置动画,该 ImageView 使用 Glide 和 URL 加载。
我遇到的问题是,无论两个 ImageView 的大小如何,在加载图像之前它们的大小都是 0,因此,过渡捕获了错误的布局值,因此显示了缩小的动画 (动画大小为 0)。
我已经阅读了有关使用 postponeEnterTransition() 的信息,它应该与 startPostponedEnterTransition() 一起延迟两个呼叫之间的过渡时间。
这是架构:
- 片段A,图片位于屏幕底部,宽度为屏幕宽度的一半。
- 片段 B,图像在屏幕顶部,宽度为屏幕宽度。
在片段 A 的图像点击时,片段 B 被加载。
在片段 B 的 onCreate 中,我使用 setSharedElementEnterTransition(transitions) 设置了我的过渡。然后我立即拨打postponeEnterTransition();
在 Fragment B 的onCreateView 中,我等待 ImageView 在布局膨胀之后被预先绘制(使用 ViewTreeObserver),然后我调用startPostponedEnterTransition()。
在我的转换上使用断点和侦听器,侦听器#onTransitionStarted 在我到达预绘制回调之前被触发,这证明转换捕获了错误的布局值。
另外,另一个证明postponeEnterTransition() 没有任何效果,移除对startPostponedEnterTransition() 的调用不会永远保持转换。
我做错了什么? 当然,当返回片段 A 时,同样的收缩动画也在播放……
【问题讨论】:
标签: android android-fragments shared-element-transition fragment-transitions