【问题标题】:Shared Transition fragment to fragment not working共享的过渡片段到片段不起作用
【发布时间】:2017-10-24 23:47:57
【问题描述】:

我有一个带有三个片段的视图寻呼机活动。我开始了另一个顶部片段,其中包含带有片段的视图寻呼机。一切都很好,我成功地做到了这一切。但是当我使用 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 我用片段实现另一个视图分页器。实现视图寻呼机后,我想展示的片段是:

     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();

但根本没有动画。如果有人有想法,请提供帮助。

【问题讨论】:

  • 那么如果你在 Fragment 之间使用共享元素,你为什么要让 Activity 参与其中呢?例如你打电话给getActivity().supportPostponeEnterTransition(); 应该是postponeEnterTransition(); 等等。
  • @Mark Keen 我做了'postponeEnterTransition();'在视图寻呼机的下一个容器片段的“onCreate()”和“startPostponedEnterTransition();”中在视图寻呼机片段中,视图寻呼机片段中的静止图像视图根本没有动画。
  • @WakilAhmad 你成功解决了这个问题吗?
  • @Jocky 还没有

标签: android android-viewpager fragment transition shared


【解决方案1】:

对不起,我的答案是在 kotlin 中,但我相信这没什么大不了的

我发现在onViewCreated 中调用startPostponedEnterTransition() 为时已晚。

ViewPager 片段

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

【讨论】:

  • 我明白了。如果您将它放在Page Fragment 而不是ViewPager Fragment 中,这可能就是原因。无论如何,如果您按照我分享的步骤进行操作,我相信您会过渡,祝您好运
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
  • 1970-01-01
  • 2017-05-12
  • 2016-11-30
  • 2018-09-22
  • 1970-01-01
相关资源
最近更新 更多