android - 使用 Android 导航组件动画片段过渡时 Z-Index 冲突
问题描述
我正在尝试使用Android Navigation而不是片段事务。然而,有一个问题开始变得麻烦。在为新片段使用滑入式动画时,Enter Animation
将位于当前片段下方。请务必查看以下视频以查看运行中的错误。
https://youtu.be/gFnXiEyiypM
该错误似乎不是来自Navigation
组件,尽管针对此特定问题引入的 hacky 解决方案(this和this)似乎在Navigation
使用时无法修复它。
在官方修复发布之前没有解决方法吗?
解决方案
在 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
}
}
}
推荐阅读
- c# - 引导错误消息在 IIS 服务器中不起作用
- c# - 如何将参数传递给控制器的 @renderpage 调用?
- azure - Kudu 中的 Powershell 进程超时
- python - 我们如何将数字附加到重复的名称,并将它们与熊猫一起上传到主 excel 文件中?
- google-colaboratory - 通过 Google Colab 使用 imread 打开图像时出现问题
- regex - 使用 Angular 表单验证未正确验证特定的正则表达式
- c# - 订购 excel 样式的行/列字符串
- ios - 使用 XCtest 在 iOS 设备上查找光标的坐标
- c# - 如何迭代其索引具有两个值并且两个值都必须插入到sql表中的列表
- angular - rxjs如何期望一个可观察的抛出错误