Material 设计父子导航过渡 recyclerview 条目到详细片段
Material Design parent-child navigational transition recyclerview entry to detail fragment
背景
我正在尝试实施 "parent-to-child" 导航 t运行 站点,特别是当您单击 Recyclerview 条目并且详细信息显示在全屏片段中时。像这样:
问题
我该如何使用这么多可用的动画 API 来完成这项工作? (TransitionManager.beginDelayedTransition、SharedT运行sition、setExitT运行sition 等)
我试过的
InboxRecyclerView - 这符合我的要求,除了它似乎只在详细视图与 Recyclerview 布局相同时才有效。因为我正在使用片段后栈在片段之间导航,所以我需要它在附加之前可能不可用的布局之间进行 t运行sition。
This post - 答案仅涵盖 activity 到 activity t运行 个问题。我正在寻找片段到片段。
Custom T运行sition - 我尝试扩展 T运行sition class,但我 运行 遇到了问题。 CaptureStartValues() 似乎从整个场景中捕获值。我需要它只从 recyclerview 条目中捕获值。此外,由于某种原因,当我在函数 createAnimator(ViewGroup sceneRoot, T运行sitionValues startValues, T运行sitionValues 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 的项目背景应该被拉伸(您需要使用 ChangeTransform
和 ChangeBounds
转换)到您的 SecondFragment 的背景,并且您的 TextView 应该移动到 SecondFragment 的标题。你应该为你的共享元素过渡使用动画:首先你应该提升你的 RecyclerView 的项目背景,然后你开始拉伸背景并移动你的标题,最后你应该将你的高度设置回正常。请注意,您的第一个片段始终应该可见,因此您应该为其设置退出持续时间:fragment1.setExitTransition(new Fade().setDuration(1).setStartDelay(<duration_of_transition>));
。
所以这里的主要目标是使用 SharedElement 转换。有一个非常好的 article 关于 SharedElement 片段到片段的转换。
背景
我正在尝试实施 "parent-to-child" 导航 t运行 站点,特别是当您单击 Recyclerview 条目并且详细信息显示在全屏片段中时。像这样:
问题
我该如何使用这么多可用的动画 API 来完成这项工作? (TransitionManager.beginDelayedTransition、SharedT运行sition、setExitT运行sition 等)
我试过的
InboxRecyclerView - 这符合我的要求,除了它似乎只在详细视图与 Recyclerview 布局相同时才有效。因为我正在使用片段后栈在片段之间导航,所以我需要它在附加之前可能不可用的布局之间进行 t运行sition。
This post - 答案仅涵盖 activity 到 activity t运行 个问题。我正在寻找片段到片段。
Custom T运行sition - 我尝试扩展 T运行sition class,但我 运行 遇到了问题。 CaptureStartValues() 似乎从整个场景中捕获值。我需要它只从 recyclerview 条目中捕获值。此外,由于某种原因,当我在函数 createAnimator(ViewGroup sceneRoot, T运行sitionValues startValues, T运行sitionValues 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 的项目背景应该被拉伸(您需要使用 ChangeTransform
和 ChangeBounds
转换)到您的 SecondFragment 的背景,并且您的 TextView 应该移动到 SecondFragment 的标题。你应该为你的共享元素过渡使用动画:首先你应该提升你的 RecyclerView 的项目背景,然后你开始拉伸背景并移动你的标题,最后你应该将你的高度设置回正常。请注意,您的第一个片段始终应该可见,因此您应该为其设置退出持续时间:fragment1.setExitTransition(new Fade().setDuration(1).setStartDelay(<duration_of_transition>));
。
所以这里的主要目标是使用 SharedElement 转换。有一个非常好的 article 关于 SharedElement 片段到片段的转换。