android - Lollipop 中的 Activity 和 Fragment 过渡

标签 android android-fragments android-5.0-lollipop shared-element-transition activity-transition

我正在努力研究 Lollipop 中新的 Activity Transition 框架。 Activity Transition 的工作非常简单,并且有一些 basic info here ,但是 Fragment Transition 没有记录,我无法让它工作。 我试过这个用例(在 Android 中很常见):

case 1: ActA+FragA -> ActB+FragB

sharedElementFragAFragB 中的图像。我没有想出工作代码,所以我退后一步尝试

case 2: ActA+FragA -> ActB

FragAActB 上有一个 sharedElement。动画不起作用,我只能看到当我在 FragA 上单击图像时,图像消失,在动画持续时间后它在 ActB 中弹出。在 FragA 外部但在 ActA 内部的共享 View (例如 Toolbar)可以正确设置动画。

在这种情况下,sharedImage 是 RecyclerView 中的 imageView,会不会是项目布局 xml 中的 xml 标记 android:transitionName="shared_icon" 不起作用?

这是我的主题:

 <!-- Window Transactions -->
    <item name="android:windowContentTransitions">true</item>
    <item name="android:windowAllowEnterTransitionOverlap">true</item>
    <item name="android:windowAllowReturnTransitionOverlap">true</item>
    <item name="android:fragmentAllowEnterTransitionOverlap">@bool/true_bool</item>
    <item name="android:fragmentAllowReturnTransitionOverlap">@bool/true_bool</item>

    <item name="android:windowEnterTransition">@transition/window_transition.xml</item>
    <item name="android:windowExitTransition">@transition/window_transition.xml</item>
    <item name="android:fragmentEnterTransition">@transition/window_transition.xml</item>
    <item name="android:fragmentReturnTransition">@transition/window_transition.xml</item>
    <item name="android:fragmentReenterTransition">@transition/window_transition.xml</item>

    <!-- Shared Element Transactions -->
    <item name="android:windowSharedElementEnterTransition">@transition/shared_elements_transform.xml</item>
    <item name="android:windowSharedElementExitTransition">@transition/shared_elements_transform.xml</item>

    <item name="android:fragmentSharedElementEnterTransition">@transition/shared_elements_transform.xml</item>
    <item name="android:fragmentSharedElementReturnTransition">@transition/shared_elements_transform.xml</item>

window_transition.xml:

<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="together"
android:duration="@integer/act_transition_duration">
<changeBounds  />
<changeTransform />
<changeClipBounds />
<changeImageTransform />
</transitionSet>

shared_element_transition.xml:

<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="together"
android:duration="@integer/act_transition_duration">
<changeImageTransform />
<changeBounds />
</transitionSet>

最佳答案

Fragment Transitions 旨在在同一 Activity 中的 Fragment 之间工作。如果您有任何两个不同的 Activity,无论它们是否有 fragment ,您都在使用 Activity Transitions。请随意忽略所有 Fragment Transition 属性。

在您的情况 2 中,如果设置正确,您的过渡应该没有问题。我猜你的应用程序主题不是从 android:Theme.Material 派生的,所以你还需要一个属性:

<item name="android:windowActivityTransitions">true</item>

windowContentTransitions 允许您使用 TransitionManager 在窗口的 setContentView 之间流畅地设置动画。

当您启动的 Activity 中有 fragment 时,如案例 1,您可能需要按照@AlexLockwood 的建议进行操作:postponeEnterTransition。但是,您还应该能够使用:

getFragmentManager().executePendingTransactions();

在您的 onCreate() 中强制立即加载 fragment ,以便 Activity Transition 将看到您布局中的所有 View 。

关于android - Lollipop 中的 Activity 和 Fragment 过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27021575/

相关文章:

android - 在弹出窗口外单击时,如何关闭弹出窗口?

java - 我可以将 Java 6 与 Android-L 一起使用吗

android 5 和 xml 布局中的 onClick

android - 平台 L 是预览版,需要应用程序 list 将 minSdkVersion 设置为 'L'

android - 如何在android中通过指定的Pincode获取位置/城镇和州?

android - 试图在 Android 中成倍增加

android - 如何从 Glide 获取图像的宽度和高度

android - Droid 手机的数学或 LaTeX 引擎

java - 调整 Fragment 中 TextView 的文本大小

android - 如何在 Android 中为 Navigation Drawer 添加一个分区分隔符?