我有多个活动包括多个片段。我尝试显示从第一个片段中的 RecyclerView 项目到第二个片段中的 ImageView 的变形动画。第一个片段进入背景(它变得有点暗),当我从第二个片段返回时,当视图在 RecyclerView 中的位置布置时,第一个片段进入前景(它变得更亮)。它看起来像在整个屏幕上闪烁。
在第一个活动中:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
window.requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS)
setExitSharedElementCallback(
MaterialContainerTransformSharedElementCallback()
)
}
在第一个片段中:
override fun onClick(t: T, poster: View) {
val intent = Intent(activity, DetailActivity::class.java).apply {
putExtras(Bundle().apply {
putParcelable(EXTRA_TMDB_ITEM, t)
putParcelable(EXTRA_NAV_TYPE, navType)
})
}
val options = ActivityOptions.makeSceneTransitionAnimation(
activity,
poster, t.name
)
startActivity(intent, options.toBundle())
}
在第二个活动中:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
window.requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS)
// set up shared element transition
setEnterSharedElementCallback(
MaterialContainerTransformSharedElementCallback()
)
window.sharedElementEnterTransition = getContentTransform()
window.sharedElementReturnTransition = getContentTransform()
}
/** get a material container arc transform. */
private fun getContentTransform(): MaterialContainerTransform {
return MaterialContainerTransform().apply {
addTarget(R.id.details_poster)
duration = 450
pathMotion = MaterialArcMotion()
}
}
在第二个片段中:
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
super.onCreateView(inflater, container, savedInstanceState)
ViewCompat.setTransitionName(binding.detailsPoster, tmdbItem.name)
}
源代码可以在这里找到:https ://github.com/alirezaeiii/TMDb-Paging
你知道我怎样才能避免第一个活动中的第一个片段进入后台吗?