我有一个视图寻呼机有三个片段的活动。我开始了另一个顶级片段,其中包含内部片段的视图寻呼机一切都很好,我成功地做到了这一切。但是当我使用addSharedElement进行从片段到片段的共享转换时,根本就没有动画发生。我用下面的新顶部片段替换片段:
View transitionView = view.findViewById(R.id.photo_image_view);
fragmentManager
.beginTransaction()
.replace(R.id.fragment_container, fragment)
.addToBackStack(null)
.addSharedElement(transitionView, ViewCompat.getTransitionName(transitionView))
.commit();
在我的下一个片段onCreate中我做了:
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getActivity() != null) {
getActivity().supportPostponeEnterTransition();
}
}
然后在onCreateView中我实现了另一个带有fragment的viewpager。在实现了view pager之后,我想要显示的片段:
desiredFragmentToShow.setSharedElementEnterTransition(TransitionInflater.from(
getActivity()).inflateTransition(R.transition.change_image_trans));
desiredFragmentToShow.setEnterTransition(TransitionInflater.from(
getActivity()).inflateTransition(android.R.transition.fade));
在onViewCreated的desiredFragmentToShow中我做了:
activity.supportStartPostponedEnterTransition();
但根本没有动画。如果有任何机构有想法,请帮忙。
答案 0 :(得分:0)
抱歉,我的回答是在kotlin,但我相信这没什么大不了的。
我发现在startPostponedEnterTransition()
中调用onViewCreated
为时已晚。
ViewPager Fragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val transition = TransitionInflater
.from(context)
.inflateTransition(R.transition.change_image_trans)
sharedElementEnterTransition = transition
/* The return transition probably should be set here as well on the way back
but I havent't try that yet so I nullify it... */
sharedElementReturnTransition = null
postponeEnterTransition()
// ... your code
}
页面片段
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
startPostponedEnterTransition()
}
这有效......
不幸的是,如果你想在转换上放置一个监听器,只有在ViewPager
中定义它才有效,因为在Page Fragment
中,如果在转换的共享转换上设置监听器,它就不会触发
val transition = parentFragment!!.sharedElementEnterTransition