共享转换片段到片段不起作用

时间:2017-10-24 23:47:58

标签: android android-viewpager fragment transition shared

我有一个视图寻呼机有三个片段的活动。我开始了另一个顶级片段,其中包含内部片段的视图寻呼机一切都很好,我成功地做到了这一切。但是当我使用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();

但根本没有动画。如果有任何机构有想法,请帮忙。

1 个答案:

答案 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