【问题标题】:Material Design parent-child navigational transition recyclerview entry to detail fragmentMaterial Design父子导航过渡recyclerview入口到细节片段
【发布时间】:2019-03-31 16:29:01
【问题描述】:

背景

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

问题

如果有这么多可用的动画 API,我该如何做呢? (TransitionManager.beginDelayedTransition、SharedTransition、setExitTransition 等)

我的尝试

  • InboxRecyclerView - 这符合我的要求,除非它似乎只在详细视图与 Recyclerview 的布局相同时才有效。因为我使用片段回栈在片段之间导航,所以我需要它在附加之前可能不可用的布局之间进行转换。

  • This post - 答案仅涵盖活动到活动的转换。我正在寻找片段到片段。

  • 自定义转换 - 我尝试扩展转换类,但遇到了问题。 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);
    

【问题讨论】:

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


    【解决方案1】:

    您应该在此处使用共享元素转换。将有 2 个共享元素:您的 RecyclerView 的项目背景和 TextView(例如)。你的 RecyclerView 的项目背景应该被拉伸(你需要使用ChangeTransformChangeBounds 转换)到你的 SecondFragment 的背景,你的 TextView 应该移动到 SecondFragment 的标题。你应该为你的共享元素过渡使用动画:首先你应该提升你的 RecyclerView 的项目背景,然后你开始拉伸背景并移动你的标题,最后你应该将你的高度设置回正常。请注意,您的第一个片段应该一直可见,因此您应该为其设置退出持续时间:fragment1.setExitTransition(new Fade().setDuration(1).setStartDelay(<duration_of_transition>));

    所以这里的主要目标是使用 SharedElement 过渡。有一个非常好的 article 用于 SharedElement 片段到片段的转换。

    【讨论】:

    • 谢谢。你的建议在大多数情况下都很有效。不幸的是,当我尝试设置一个不是 Fade 的自定义 exitTransition(我希望像 gif 中那样使 fragment1 变暗)时,即使我使用 setduration 和 setstartdelay,第一个片段也不再可见。我想我会为此创建另一个帖子。
    猜你喜欢
    • 2019-04-12
    • 2015-01-29
    • 2019-04-23
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    相关资源
    最近更新 更多