上面播放的Android Fragment过渡退出动画进入动画

Mar*_*kus 11 android android-animation android-fragments

我正在实现Fragment过渡动画.

我的exit动画是

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:ordering="together">
    <objectAnimator
        android:propertyName="scaleX"
        android:valueType="floatType"
        android:valueFrom="1.0"
        android:valueTo="0.95"
        android:duration="300"/>

    <objectAnimator
        android:propertyName="scaleY"
        android:valueType="floatType"
        android:valueFrom="1.0"
        android:valueTo="0.95"
        android:duration="300"/>

    <objectAnimator
        android:propertyName="x"
        android:valueType="floatType"
        android:valueFrom="0"
        android:valueTo="10dp"
        android:duration="300"/>
</set>
Run Code Online (Sandbox Code Playgroud)

enter 动画是:

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="x"
    android:valueType="floatType"
    android:valueFrom="1280"
    android:valueTo="0"
    android:duration="400"/>
Run Code Online (Sandbox Code Playgroud)

事务创建如下:

fragmentManager.beginTransaction()
            .setCustomAnimations(enter, exit, popEnter, popExit)
            .replace(CONTENT_CONTAINER_ID, newFragment)
            .addToBackStack(null)
            .commit();
Run Code Online (Sandbox Code Playgroud)

在正常的动画速度下,由于动画持续时间较短,不需要的效果几乎不可见,但是,当你放慢速度时,你可以清楚地看到,这z-order是错误的.

输入片段动画在退出片段动画下方.是否有解决方法来解决这个问题?

小智 4

我认为您可以尝试以下方法作为解决方法。

fragmentTr.setCustomAnimations(enter, exit);
fragmentTr.hide(currentFragment);
fragmentTr.add(containerId, newFragment, "aTag");
fragmentTr.show(newFragment);
fragmentTr.commit();
Run Code Online (Sandbox Code Playgroud)

不要使用replace()。我尝试了上面的方法,并且有效。希望这可以帮助。