我正在尝试使用Android Navigation而不是片段事务。然而,有一个问题开始变得麻烦。在Enter Animation
中使用滑入式动画时,新片段将位于当前片段下方。请务必观看以下视频以查看实际的错误。
https://youtu.be/gFnXiEyiypM
尽管针对此特定问题引入的hacky解决方案(this和this)似乎无法修复该错误,但该错误似乎并非来自Navigation
组件使用了Navigation
。
在正式修复程序发布之前,没有解决方法吗?
答案 0 :(得分:0)
很遗憾,Google尚未解决此问题。据报道:https://issuetracker.google.com/issues/79443865
我很难理解像Google这样的公司如何无法提供他们在材料指南中要求我们做的事情。
答案 1 :(得分:0)
在Google发布正式的修复程序之前,该问题已得到修复。解决方案是使用以下代码覆盖onCreateAnimation
:
class BaseFragment : Fragment() {
override fun onCreateAnimation(transit: Int, enter: Boolean, nextAnim: Int): Animation? {
if (nextAnim == R.anim.fragment_enter) {
val nextAnimation = AnimationUtils.loadAnimation(context, nextAnim)
nextAnimation.setAnimationListener(object : Animation.AnimationListener {
private var startZ = 0f
override fun onAnimationStart(animation: Animation) {
view?.apply {
startZ = ViewCompat.getTranslationZ(this)
ViewCompat.setTranslationZ(this, 10f)
}
}
override fun onAnimationEnd(animation: Animation) {
// Short delay required to prevent flicker since other Fragment wasn't removed just yet.
view?.apply {
this.postDelayed({ ViewCompat.setTranslationZ(this, startZ) }, 100)
}
}
override fun onAnimationRepeat(animation: Animation) {}
})
return nextAnimation
} else {
return null
}
}
}