android - Material Design 父子导航过渡 RecyclerView 入口到细节 fragment

标签 android android-fragments android-recyclerview material-design android-transitions

背景

我正在尝试实现“父到子”导航转换,特别是当您单击 Recyclerview 条目并且详细信息显示在全屏 fragment 中时。像这样的事情:

Parent to child example

问题

面对这么多可用的动画 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)(您需要使用 ChangeTransformChangeBounds 过渡)到 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/

相关文章:

android-volley - 为什么我的recyclerview 只显示第一项的内容?

Android Google Analytics SDK 显示 "SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length"

android - 设置 SearchView 清除按钮颜色

java - fragment Popbackstack 调用替换我的根 fragment

java - 使用 Fragments、ViewPager、PullToRefresh 进行应用程序设计

java - Json数据输出不更新 fragment View

android - 从 arraylist 中删除数据时,Recyclerview 没有正确更新行?

java - Android中的车辆跟踪系统

java - 单击项目导致 IllegalStateException

java - 如何以编程方式检测项目何时在 RecyclerView 中可见?