我想通过animation在活动中交换两个片段。假设PageA用于屏幕A和左侧屏幕,PageB用于片段B,即屏幕右侧。现在我希望当我点击pageA上的一个按钮时,PageA将移动到屏幕的右侧,并带有一些过渡动画。
我尝试使用以下代码替换位置
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container, new FragB());
fragmentTransaction.commit();
寻找一些线索。
提前致谢。
答案 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类型,而只是实现旧的动画框架。