8

我正试图Activity Transition围绕Lollipop. 活动转换的工作非常简单,这里有一些基本信息,但Fragment Transition没有记录,我无法让它工作。我已经尝试过这个用例(在 Android 中很常见):

案例 1:ActA+FragA -> ActB+FragB

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

案例 2:ActA+FragA -> ActB

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

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

这是我的主题:

 <!-- 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>
4

1 回答 1

6

片段转换旨在在同一 Activity 中的片段之间工作。如果您有任何两个不同的活动,无论它们是否有片段,您都在使用活动转换。随意忽略所有片段转换属性。

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

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

windowContentTransitions 允许您使用 TransitionManager 在窗口的 setContentView 之间平滑地动画。

当您启动的活动中有一个片段时,例如案例 1,您可能需要按照@AlexLockwood 的建议进行操作:推迟EnterTransition。但是,您还应该能够使用:

getFragmentManager().executePendingTransactions();

在您的 onCreate() 中强制片段立即加载,以便活动转换将看到您布局中的所有视图。

于 2014-11-20T00:24:24.290 回答