Mal*_*loz 6 android android-transitions shared-element-transition android-architecture-navigation androidx
我在我的应用程序中放置了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]
Run Code Online (Sandbox Code Playgroud)
我从片段A中的RecyclerView开始,在其中单击时,我设置了唯一的过渡名称。
然后,我将该名称作为参数使用SafeArgs以及FragmentNavigatorExtras中的视图进行传递。
在片段B中,我延迟了onCreate:中的过渡, postponeEnterTransition()
并设置了过渡类型:
transition = TransitionSet().apply {
addTransition(ChangeTransform())
addTransition(ChangeBounds())
startDelay = 150
}
sharedElementEnterTransition = transition
sharedElementReturnTransition = transition
Run Code Online (Sandbox Code Playgroud)
我在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
}
}
Run Code Online (Sandbox Code Playgroud)
而且返回转换也不起作用。
我只使用androidx.transition.*元素
在此先感谢您的帮助
小智 4
我在 Google 从事 Transitions 库工作。此问题意味着您已将 Android 10(Q) 设置为 targetSdkVersion 并使用过时版本的过渡库。旧版本使用反射来访问Android框架中的私有方法,现在从Q开始受到限制(当您将其指定为targetSdk,而不是compileAdk时)。新版本不再使用反射。要解决此问题,您需要将过渡库版本更新到至少 1.2.0 https://developer.android.com/jetpack/androidx/releases/transition#1.2.0
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |