Android 通过动画交换活动中的片段

Android 通过动画交换活动中的片段,android,android-animation,Android,Android Animation,我想通过动画交换活动中的两个片段。假设PageA代表片段A,屏幕左侧,PageB代表片段B,即屏幕右侧。现在我想,当我点击pageA上的一个按钮时,pageA将移动到屏幕的右侧,并带有一些过渡动画 我试着用下面的代码替换这个位置 FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransacti

我想通过动画交换活动中的两个片段。假设PageA代表片段A,屏幕左侧,PageB代表片段B,即屏幕右侧。现在我想,当我点击pageA上的一个按钮时,pageA将移动到屏幕的右侧,并带有一些过渡动画

我试着用下面的代码替换这个位置

FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container, new FragB());
fragmentTransaction.commit();
寻找线索


提前感谢。

以前的问题,您可能已经解决了,但供将来参考:

以下是通过代码替换片段时设置自定义动画的方法:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
ft.replace(R.id.fragment_container, newFragment, "fragment");
// Start the animated transition.
ft.commit();
下面是左动画中幻灯片的示例:

<?xml version="1.0" encoding="utf-8"?>
<set>
  <translate xmlns:android="http://schemas.android.com/apk/res/android"
   android:fromXDelta="-100%"
   android:toXDelta="0"
   android:interpolator="@android:anim/decelerate_interpolator"
   android:duration="500"/>
</set>

请注意,如果使用的是兼容性库,则这是动画。相反,如果您使用的是对FragmentManager本机支持的和SDK,那么您的动画将如下所示:

<?xml version="1.0" encoding="utf-8"?>
<set>
  <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="x" 
    android:valueType="floatType"
    android:valueFrom="-1280"
    android:valueTo="0" 
    android:duration="500"/>
</set>


这是因为兼容性库不支持新的objectAnimator类型,而只实现旧的动画框架。

这肯定是正确的答案。请注意,顺序很重要!在添加/替换调用之前,需要先调用setCustomAnimations()!那么,如果你想获得最佳效果,你应该使用哪种方法呢?这些不同的动画并不完全相同。通过使用-1280的值,假设片段的宽度等于1280。如果宽度更大,则不会完全从屏幕上启动。您可以使用android命名空间中的预定义动画:transaction.setCustomAnimations(android.R.anim.slide\U在左,android.R.anim.slide\U在右);预定义的动画会触发运行时异常FWIW,因为它们依赖于“translate”标记