带有片段共享元素过渡的 WindowInset
WindowInset with Fragment Shared Element Transition
我正在尝试向我的片段添加共享元素过渡,这将在顶部创建类似居中徽标的内容。我通过共享元素转换成功地做到了这一点,但徽标也应用了一些 window 插图。问题在于只有在共享元素转换完成后才会应用 window 插图。这使得视图看起来像是跳到了它们的最终位置。
我正在使用下面的代码。
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = layoutInflater?.inflate(R.layout.onboarding_layout, container, false)
return view
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
ViewCompat.setOnApplyWindowInsetsListener(appimageviewLogo) { view, insets ->
val params = view.layoutParams as ViewGroup.MarginLayoutParams
params.topMargin = params.topMargin + insets.systemWindowInsetTop
insets
}
ViewCompat.setOnApplyWindowInsetsListener(appbuttonSkip) { view, insets ->
val params = view.layoutParams as ViewGroup.MarginLayoutParams
params.bottomMargin = params.bottomMargin + insets.systemWindowInsetBottom
insets.consumeSystemWindowInsets()
}
ViewCompat.requestApplyInsets(appimageviewLogo)
ViewCompat.requestApplyInsets(appbuttonSkip)
}
有人可以帮我吗?
如何在执行共享元素转换之前先应用 window 插入,这样 "jumping" 就不会发生?
所以基本上我会回答我自己的问题。解决方案是 postpone 传入片段的 enterTransition,然后请求 window 插入,然后启动 postponedEnterTransition。
我从 Medium 的 Andranik Azizbekian 的 post 那里得到了所有这些。您可以在此处查看他的 post 关于 window 插图 here and here 是 link 我的问题和他对这些问题的回答。 :)
注意:为了 postpone enter transition 对 fragments 有效,setReorderingAllowed 必须通过 FragmentTransaction 设置为 true。
我正在尝试向我的片段添加共享元素过渡,这将在顶部创建类似居中徽标的内容。我通过共享元素转换成功地做到了这一点,但徽标也应用了一些 window 插图。问题在于只有在共享元素转换完成后才会应用 window 插图。这使得视图看起来像是跳到了它们的最终位置。
我正在使用下面的代码。
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = layoutInflater?.inflate(R.layout.onboarding_layout, container, false)
return view
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
ViewCompat.setOnApplyWindowInsetsListener(appimageviewLogo) { view, insets ->
val params = view.layoutParams as ViewGroup.MarginLayoutParams
params.topMargin = params.topMargin + insets.systemWindowInsetTop
insets
}
ViewCompat.setOnApplyWindowInsetsListener(appbuttonSkip) { view, insets ->
val params = view.layoutParams as ViewGroup.MarginLayoutParams
params.bottomMargin = params.bottomMargin + insets.systemWindowInsetBottom
insets.consumeSystemWindowInsets()
}
ViewCompat.requestApplyInsets(appimageviewLogo)
ViewCompat.requestApplyInsets(appbuttonSkip)
}
有人可以帮我吗?
如何在执行共享元素转换之前先应用 window 插入,这样 "jumping" 就不会发生?
所以基本上我会回答我自己的问题。解决方案是 postpone 传入片段的 enterTransition,然后请求 window 插入,然后启动 postponedEnterTransition。
我从 Medium 的 Andranik Azizbekian 的 post 那里得到了所有这些。您可以在此处查看他的 post 关于 window 插图 here and here 是 link 我的问题和他对这些问题的回答。 :)
注意:为了 postpone enter transition 对 fragments 有效,setReorderingAllowed 必须通过 FragmentTransaction 设置为 true。