我正在将Android导航组件放置在我的应用程序中。
一些转换效果很好,但对于这个,我遇到了一个错误。转换视图从片段 A 到新片段(B),停留在新片段上并隐藏了某些元素。此外,当我在片段中滚动时,视图不随之滚动。这是我收到的错误:
W/t.qoqa.ui.debu: Accessing hidden method Landroid/view/GhostView;->removeGhost(Landroid/view/View;)V (greylist-max-p, reflection, denied)
I/GhostViewApi21: Failed to retrieve removeGhost method
java.lang.NoSuchMethodException: android.view.GhostView.removeGhost [class android.view.View]
我从片段A中的RecyclerView开始,点击时为其设置一个唯一的过渡名称。
然后,我使用SafeArgs将该名称作为参数传递,并在FragmentNavigatorExtras中与视图一起传递。
在片段B中,我在onCreate中延迟了过渡:postponeEnterTransition()
并设置了过渡类型:
transition = TransitionSet().apply {
addTransition(ChangeTransform())
addTransition(ChangeBounds())
startDelay = 150
}
sharedElementEnterTransition = transition
sharedElementReturnTransition = transition
我在onViewCreated方法中设置了名称:
ViewCompat.setTransitionName(product_image, args.imageTransitionName)
最后,当图片准备好显示时,Glide Listener启动了转换。listener = object: RequestListener<Drawable> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<Drawable>?,
isFirstResource: Boolean
): Boolean {
startPostponedEnterTransition()
return false
}
override fun onResourceReady(
resource: Drawable?,
model: Any?,
target: Target<Drawable>?,
dataSource: DataSource?,
isFirstResource: Boolean
): Boolean {
startPostponedEnterTransition()
return false
}
}
同时返回过渡效果也无法正常工作。
我仅使用
androidx.transition.*
元素。
提前感谢您的帮助。