从Android返回栈中以动画方式弹出片段

15

我有一个活动(Activity),其中加载了一个 Fragment A。Fragment A 包含一个 ListView,点击列表项后,我将另一个 Fragment B 加载到 Fragment A 中以显示列表项的详细信息。在按钮单击和按下设备返回按钮时,它会加载上一个 Fragment,即显示 ListView 的 Fragment A。这一切都正常工作,但我希望在按下返回键或按钮单击时,能够以动画方式加载 Fragment A。我按以下方式实现,但没有生效:

   FragmentManager fsm = getSupportFragmentManager();
   FragmentTransaction ftransaction = fsm.beginTransaction();                   
   ftransaction.setCustomAnimations(R.anim.enter_from_left, R.anim.enter_from_left);        
   fsm.popBackStack();
   ftransaction.commit();

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <translate
     android:duration="700"
     android:fromXDelta="-100%"
     android:fromYDelta="0%"
     android:toXDelta="0%"
     android:toYDelta="0%" />
</set>


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
  android:shareInterpolator="false" >

  <translate
    android:duration="700"
    android:fromXDelta="-100%"
    android:fromYDelta="0%"
    android:toXDelta="0%"
    android:toYDelta="0%" />

</set>
3个回答

30

7
在我的情况下
FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.setCustomAnimations(android.R.anim.slide_in_left, 
                               android.R.anim.slide_out_right, 
                               R.anim.slide_in_right,
                               R.anim.slide_out_left);
        ft.replace(R.id.fragment_container, targetFragment).addToBackStack(null).commit();

这行代码

ft.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right, 
                       R.anim.slide_in_right, R.anim.slide_out_left);

would create perfect animation.

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>

滑出左侧(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>

0
使用导航组件也非常容易:
        app:enterAnim="@anim/slide_in_left"
        app:exitAnim="@anim/slide_out_right"
        app:popEnterAnim="@anim/slide_in_right"
        app:popExitAnim="@anim/slide_out_left"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接