如何使用Fragment之间动画的共享元素转换

时间:2017-03-21 10:31:18

标签: android android-viewpager shared-element-transition

我正在使用包含三个片段的视图寻呼机。现在我想在刷子中使用FirstFragment中的ImageView1和Second Fragment中的ImageView2之间的共享元素转换。如何做到这一点以进行这种转换我们需要添加fragmentTransaction.addSharedElement(..),但在这种情况下我们没有明确地进行任何片段事务。

2 个答案:

答案 0 :(得分:1)

视图寻呼机实际上在内部执行一些片段事务。但是,碎片会提前添加,而不是在用户滑动时添加。所以你不会看到动画。

自定义视图寻呼机动画的方法是实现自定义ViewPager.PageTransformer,然后将其应用于viewPager.setPageTransformer(yourPageTransformer)

请参阅docs

但是,你必须自己处理动画。

答案 1 :(得分:1)

我遇到了同样的问题。在ViewPager页面之间,标准共享元素过渡不起作用。

所以我写了SharedElement ViewPager library。它既适用于由onClick()事件引起的过渡(viewPager.setCurrentItem(x)),也适用于用户引起的页面幻灯片。动画绑定到手指移动。

看看。

SharedElementPageTransformer demo gif

用法

  1. 将ViewPager中的所有片段以相同顺序添加到列表中。
        ArrayList<Fragment> fragments = new ArrayList<>();
        fragments.add(hello_fragment);
        fragments.add(small_picture_fragment);
  1. 大概在 Activity.onCreate()中创建 SharedElementPageTransformer
    是指活动:
        SharedElementPageTransformer transformer =
                new SharedElementPageTransformer(this,  fragments);
  1. 通过传递一对需要链接在一起的视图ID来添加共享的过渡
        transformer.addSharedTransition(R.id.smallPic_image_cat, R.id.bigPic_image_cat);
  1. 将我们的 transformer 设置为ViewPager的pageTransformer AND onPageChangeListener。
        viewPager.setPageTransformer(false, transformer);
        viewPager.addOnPageChangeListener(transformer);

您唯一需要做的就是在需要动画的 ImageView 顶部的 RecyclerView 片段上创建其他的 ImageView 。然后,您可以在目标 ViewPager 页面上从它过渡到 ImageView