通过动画在活动中交换片段

时间:2012-01-16 05:34:55

标签: android android-animation

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

我尝试使用以下代码替换位置

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

寻找一些线索。

提前致谢。

1 个答案:

答案 0 :(得分:262)

陈旧的问题,你可能已经弄清楚了,但是为了将来参考:

这是您通过代码替换片段时用于设置自定义动画的内容:

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();

以下是slide_in_left动画的示例:

<?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>

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

<?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类型,而只是实现旧的动画框架。