我想在 ViewPager 中使用 SharedElement 从一个 Fragment 过渡到另一个 Fragment 为视图设置动画。
我在 ViewPager 中有 3 个片段,每个片段在 XML 文件中都有一个具有相同转换名称的 TextView。
现在,当 ViewPager 滑动另一个 Fragment 时,我希望看到 SharedElement 的实际效果。
我想在 ViewPager 中使用 SharedElement 从一个 Fragment 过渡到另一个 Fragment 为视图设置动画。
我在 ViewPager 中有 3 个片段,每个片段在 XML 文件中都有一个具有相同转换名称的 TextView。
现在,当 ViewPager 滑动另一个 Fragment 时,我希望看到 SharedElement 的实际效果。
我有同样的问题。标准共享元素转换在 ViewPager 页面之间不起作用。
所以我写了一个共享元素视图分页器库。它既适用于由 onClick() 事件(例如 viewPager.setCurrentItem(x) )引起的转换,也适用于由用户引起的页面幻灯片。动画绑定到手指运动。
这不是 android 转换,因此可能存在一些障碍。不过看看。
SharedElementPageTransformer 演示
ArrayList<Fragment> fragments = new ArrayList<>();
fragments.add(hello_fragment);
fragments.add(small_picture_fragment);
SharedElementPageTransformer transformer =
new SharedElementPageTransformer(this, fragments);
transformer.addSharedTransition(R.id.smallPic_image_cat, R.id.bigPic_image_cat);
viewPager.setPageTransformer(false, transformer);
viewPager.addOnPageChangeListener(transformer);
这可能已经很长时间了,但可能会有所帮助。完全有可能在 2 个 viewPager 之间共享元素转换,因为我自己已经做过了。
我认为您可能缺少的是过渡名称必须是唯一的! 所以它必须以编程方式而不是在 XML 中设置!这在 ViewPager 中非常重要,因为同一个视图可能会被多次放大。
imageView.setTransitionName("unique_name");
这样,过渡就知道应该播放什么元素;)