使用Android Navigation组件进行片段转换动画时,Z-Index冲突问题

4
我正在尝试使用Android Navigation代替片段事务。然而,有一个问题变得棘手了起来。在使用进入动画的滑入动画时,新片段会在当前片段下面。请务必查看以下视频以查看错误的情况。
https://youtu.be/gFnXiEyiypM 虽然这个 bug 似乎不是从Navigation组件中出现的,但是为了解决这个特定问题而引入的 hacky 解决方案 (thisthis) 在使用Navigation时似乎无法解决它。 难道没有绕过这个问题的方法,直到正式发布修复吗?
2个回答

2

在Google发布官方修复之前,有一个hacky的解决方法。解决方法是使用以下代码覆盖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
        }
    }
}

谢谢,我会尝试一下 :) - Jeremi
这对我有效。等待Google官方修复。片段1.2.0-rc2版本仍未解决此问题。 - marcouberti

0

实际上,我要发布一个解决方案修复。 - 2hamed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接