如何在BackStack上反转片段动画?

112 android android-animation android-fragments back-stack

我认为当使用以下代码使用片段时按下后退按钮时,系统会反转backstack上的动画:

FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out);
ft.replace(R.id.viewContainer, new class(), "layout").addToBackStack(null).commit();
Run Code Online (Sandbox Code Playgroud)

小智 261

根据自定义动画android文档:

更改:

ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out);
Run Code Online (Sandbox Code Playgroud)

至:

ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out, R.anim.hyperspace_in, R.anim.slide_out );
Run Code Online (Sandbox Code Playgroud)

现在背板堆动画 - 反过来!!

  • 顺便说一句,我知道这与你的问题和答案无关,但是你可以将我链接到一些解释自定义动画的东西吗?:P (2认同)
  • AreusAstarte:请参阅http://developer.android.com/reference/android/app/FragmentTransaction.html#setCustomAnimations(int,int,int,int) (2认同)

小智 23

使用正确的动画我使用了以下内容,它的工作方式就像一个魅力

slide_in_left.xml

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

slide_in_right.xml

 <?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_mediumAnimTime" >

    <objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="500"
        android:propertyName="x"
        android:valueFrom="0"
        android:valueTo="1000"
        android:valueType="floatType" />

</set>
Run Code Online (Sandbox Code Playgroud)

slide_out_left.xml

   <set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_mediumAnimTime" >

    <objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="500"
        android:propertyName="x"
        android:valueFrom="0"
        android:valueTo="-1000"
        android:valueType="floatType" />

</set>
Run Code Online (Sandbox Code Playgroud)

slide_out_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_mediumAnimTime" >

    <objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="500"
        android:propertyName="x"
        android:valueFrom="-1000"
        android:valueTo="0"
        android:valueType="floatType" />

</set>
Run Code Online (Sandbox Code Playgroud)

然后在添加片段时使用以下

setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
                                R.anim.slide_out_right, R.anim.slide_in_right)
Run Code Online (Sandbox Code Playgroud)

它将100%工作

  • 请注意,如果您使用支持片段管理器或片段扩展了Fragment的支持版本,则此方法无效 (2认同)
  • @DanielShatz您必须使用翻译而不是objectAnimators。例如,slide_in_left.xml将是:`&lt;翻译android:fromXDelta =“ 100%” android:startOffset =“ 25” android:toXDelta =“ 0” /&gt;`查看此答案:http://stackoverflow.com/a / 5151774/1738090 (2认同)

Hoa*_*Huu 12

在我的情况下

ft.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right, 
                       R.anim.slide_in_right, R.anim.slide_out_left);
Run Code Online (Sandbox Code Playgroud)

会创造出完美的动画.

slide_in_right

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="50%p" android:toXDelta="0"
               android:duration="@android:integer/config_mediumAnimTime"/>
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
           android:duration="@android:integer/config_mediumAnimTime" />
</set>
Run Code Online (Sandbox Code Playgroud)

slide_out_left

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0" android:toXDelta="-50%p"
               android:duration="@android:integer/config_mediumAnimTime"/>
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
           android:duration="@android:integer/config_mediumAnimTime" />
</set>
Run Code Online (Sandbox Code Playgroud)

  • 我想过自己做,但我太懒了。我说有人应该在 StackOverflow 上发布这个,它就在这里!哈哈 (2认同)