【问题标题】:Fragment to Fragment Transition: postponeEnterTransition() does not work片段到片段的过渡:推迟EnterTransition() 不起作用
【发布时间】: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


    【解决方案1】:

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

    请参阅Android docsthis blog post by Chris Banes 的重新排序部分了解更多上下文。

    【讨论】:

    • 我怎么会错过呢?谢谢。我无法进行测试,因为我已经开始不进行转换(项目要求),但无论如何我都会验证你的答案,因为如果这不起作用,什么会让它起作用?谢谢和欢呼!
    • 不幸的是,setReorderingAllowed(true) 破坏了我的背部动画(将动画返回给调用片段)。知道这是为什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多