你需要使用新的android.animation
框架(对象动画师)FragmentTransaction.setCustomAnimations
也FragmentTransaction.setTransition
.
这是一个使用示例setCustomAnimations
来自 ApiDemos 的FragmentHideShow.java:
ft.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out);
这是相关的动画 XMLres/animator/fade_in.xml:
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:interpolator/accelerate_quad"
android:valueFrom="0"
android:valueTo="1"
android:propertyName="alpha"
android:duration="@android:integer/config_mediumAnimTime" />
请注意,您可以使用组合多个动画师<set>
,就像使用旧的动画框架一样。
EDIT:既然人们询问滑入/滑出的问题,我将在这里对此进行评论。
滑入和滑出
您当然可以将translationX
, translationY
, x
, and y
属性,但通常幻灯片涉及在屏幕外进出的动画内容。据我所知,没有任何使用相对值的转换属性。但是,这并不妨碍您自己编写它们。请记住,属性动画只需要您正在设置动画的对象(在本例中为视图)上的 getter 和 setter 方法,因此您可以创建你自己的 getXFraction
and setXFraction
视图子类上的方法,如下所示:
public class MyFrameLayout extends FrameLayout {
...
public float getXFraction() {
return getX() / getWidth(); // TODO: guard divide-by-zero
}
public void setXFraction(float xFraction) {
// TODO: cache width
final int width = getWidth();
setX((width > 0) ? (xFraction * width) : -9999);
}
...
}
现在您可以为“xFraction”属性设置动画,如下所示:
res/animator/slide_in.xml:
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:valueFrom="-1.0"
android:valueTo="0"
android:propertyName="xFraction"
android:duration="@android:integer/config_mediumAnimTime" />
请注意,如果您要设置动画的对象与其父对象的宽度不同,则情况看起来不太正确,因此您可能需要调整属性实现以适合您的用例。