棒棒糖中的活动和片段转换

Dav*_*ini 8 android android-fragments android-5.0-lollipop activity-transition shared-element-transition

我正试图围绕新的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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

Geo*_*unt 6

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

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

<item name="android:windowActivityTransitions">true</item>
Run Code Online (Sandbox Code Playgroud)

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

如果在启动的Activity中有片段,例如案例1,则可能需要按@AlexLockwood建议:postponeEnterTransition.但是,您还应该能够使用:

getFragmentManager().executePendingTransactions();
Run Code Online (Sandbox Code Playgroud)

在onCreate()内强制片段立即加载,以便Activity Transition可以看到布局中的所有视图.