android – 在片段之间动画化的共享元素

我试图从RecyclerView中的一个选定的项目将2个简单的视图动画化为一个新的片段。我已经看了很多从一个Activity到另一个Activity的动画化共享元素的例子,但很少有将共享元素从一个Fragment中动画化到另一个Activity中的另一个Fragment的例子。几乎可以工作

这是我的结构。

活动

– 全屏Fragment1与RecyclerView

– 全屏Fragment2与细节

当用户在Fragment1中的RecyclerView中选择一个项目时,我将Fragment1替换为具有视图的Fragment2,其中具有不同位置和大小的共享元素。

有一个诀窍让它工作,你必须确保你的transitionName对于列表中的每个项目是唯一的,当然,这个transitionName必须与Fragment2中的元素的transitionName匹配才能播放。我有这部分工作,当我选择一个项目,2共享视图做动画,而不是你期望在2活动之间做什么。

如果我选择屏幕底部附近的一个项目,它将绘制“Fragment2”视图,并将2个共享视图动画化为屏幕顶部的项目。很难解释。这里有一些图片

片段1

Fragment2

在两个片段中,我设置以下

        setSharedElementEnterTransition(new ChangeBounds());
        setSharedElementReturnTransition(new ChangeBounds());
        setAllowEnterTransitionOverlap(true);
        setAllowReturnTransitionOverlap(true);

也在他们的父活动在onCreate()我已经设置

        getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);

任何想法为什么我的共享元素动画从我的屏幕的顶部开始,即使他们从我的屏幕底部的选定项目开始?

终于解决了这个问题!事实证明,因为我在两个片段之间共享的视图是第二个片段中的另一个视图(RelativeLayout)的子节点,您需要将ChangeTransform转换添加到TransitionSet中。显然ChangeTransform告诉系统在第一个片段中记住视图原始位置,然后再动画到第二个片段中的新位置。这是我更新的转换集。我还会清理我的测试项目代码,并最终推出bitbucket,以防其帮助别人在我之后。感谢所有的帮助与这一个亚历克斯,并感谢你@乔治·安德回答类似的问题,放弃了我的这个解决方案的暗示。

<?xml version="1.0" encoding="utf-8"?>

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
    <changeTransform/>
    <changeBounds/>
</transitionSet>

https://bitbucket.org/brockoli/fragmentsharedelements

http://stackoverflow.com/questions/26950801/shared-elements-animating-between-fragments

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:android – 在片段之间动画化的共享元素