背景
我正在尝试实现“父到子”导航转换,特别是当您单击 Recyclerview 条目并且详细信息显示在全屏 fragment 中时。像这样的事情:
问题
面对这么多可用的动画 API,我该如何做到这一点? (TransitionManager.beginDelayedTransition、SharedTransition、setExitTransition 等)
我尝试过的
InboxRecyclerView - 这符合我的要求,但它似乎仅在详细 View 与 Recyclerview 的布局相同时才有效。因为我使用 fragment 返回堆栈在 fragment 之间导航,所以我需要它在附加之前可能不可用的布局之间进行转换。
This post - 答案仅涵盖 Activity 到 Activity 的转换。我正在寻找 fragment 到 fragment 。
自定义转换 - 我尝试扩展 Transition 类,但遇到了问题。 CaptureStartValues() 似乎捕获了整个场景的值。我需要它只捕获 recyclerview 条目中的值。另外,由于某种原因,当我在函数 createAnimator(ViewGroup sceneRoot, TransitionValues startValues, TransitionValues endValues) 中得到 null endValues 时,没有捕获最终值。
TransitionSet exitTransition = new TransitionSet() .addTransition(new ChangeBounds()) .addTransition(new ChangeTransform()) .addTransition(new ChangeClipBounds()) .addTransition(new ChangeImageTransform()) .addTransition(new Expand()) .setOrdering(TransitionSet.ORDERING_TOGETHER); TransitionSet enterTransition = new TransitionSet() .addTransition(new Fade()); newFragment.setEnterTransition(enterTransition); oldFragment.setExitTransition(exitTransition);
最佳答案
您应该在此处使用共享元素转换。将有 2 个共享元素:RecyclerView 的项目背景和 TextView(例如)。您的 RecyclerView 的项目背景应拉伸(stretch)(您需要使用 ChangeTransform
和 ChangeBounds
过渡)到 SecondFragment 的背景,并且您的 TextView 应移动到 SecondFragment 的标题。您应该为共享元素过渡使用动画:首先您应该提升 RecyclerView 的项目背景,然后开始拉伸(stretch)背景并移动标题,最后您应该将高度设置回正常。请注意,您的第一个 fragment 始终应该可见,因此您应该为其设置退出持续时间:fragment1.setExitTransition(new Fade().setDuration(1).setStartDelay(<duration_of_transition>));
。
所以这里的主要目标是使用 SharedElement 转换。有一个很好的article关于 SharedElement fragment 到 fragment 的转换。
关于android - Material Design 父子导航过渡 RecyclerView 入口到细节 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53016732/