所以我试图复制这个:https://developer.android.com/training/animation/cardflip.html
但是不是香草FragmentManger
,我正在尝试使用支持FragmentManager
来执行此操作。
这是我要做的:
为了使它适用于支持Fragment
,我制作了anim
文件而不是animator
文件。
card_flip_left_in.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Before rotating, immediately set the alpha to 0. -->
<alpha
android:valueFrom="1.0"
android:valueTo="0.0"
android:propertyName="alpha"
android:duration="0" />
<!-- Rotate. -->
<rotate
android:valueFrom="-180"
android:valueTo="0"
android:propertyName="rotationY"
android:interpolator="@android:interpolator/accelerate_decelerate"
android:duration="@integer/card_flip_time_full" />
<!-- Half-way through the rotation (see startOffset), set the alpha to 1. -->
<alpha
android:valueFrom="0.0"
android:valueTo="1.0"
android:propertyName="alpha"
android:startOffset="@integer/card_flip_time_half"
android:duration="1" />
</set>
card_flip_left_out.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Rotate. -->
<rotate
android:valueFrom="0"
android:valueTo="180"
android:propertyName="rotationY"
android:interpolator="@android:interpolator/accelerate_decelerate"
android:duration="@integer/card_flip_time_full" />
<!-- Half-way through the rotation (see startOffset), set the alpha to 0. -->
<alpha
android:valueFrom="1.0"
android:valueTo="0.0"
android:propertyName="alpha"
android:startOffset="@integer/card_flip_time_half"
android:duration="1" />
</set>
card_flip_right_in.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Before rotating, immediately set the alpha to 0. -->
<alpha
android:valueFrom="1.0"
android:valueTo="0.0"
android:propertyName="alpha"
android:duration="0" />
<!-- Rotate. -->
<rotate
android:valueFrom="180"
android:valueTo="0"
android:propertyName="rotationY"
android:interpolator="@android:interpolator/accelerate_decelerate"
android:duration="@integer/card_flip_time_full" />
<!-- Half-way through the rotation (see startOffset), set the alpha to 1. -->
<alpha
android:valueFrom="0.0"
android:valueTo="1.0"
android:propertyName="alpha"
android:startOffset="@integer/card_flip_time_half"
android:duration="1" />
</set>
card_flip_right_out.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Rotate. -->
<rotate
android:valueFrom="0"
android:valueTo="-180"
android:propertyName="rotationY"
android:interpolator="@android:interpolator/accelerate_decelerate"
android:duration="@integer/card_flip_time_full" />
<!-- Half-way through the rotation (see startOffset), set the alpha to 0. -->
<alpha
android:valueFrom="1.0"
android:valueTo="0.0"
android:propertyName="alpha"
android:startOffset="@integer/card_flip_time_half"
android:duration="1" />
</set>
最后,这是我进行转换的代码:
private void flipFragment(Fragment fragment, String tag){
// if we are showing the back, just pop the back stack
if(showingBack){
getSupportFragmentManager().popBackStack();
showingBack = false;
return;
}
// otherwise flip it
showingBack = true;
getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(
R.anim.card_flip_right_in,
R.anim.card_flip_right_out,
R.anim.card_flip_left_in,
R.anim.card_flip_left_out)
.replace(getFragmentViewId(), fragment, tag)
.addToBackStack(null)
.commit();
}
除了动画之外,一切都在工作。
编辑:使用淡入淡出动画效果很好:
.setCustomAnimations(
android.R.anim.fade_in, android.R.anim.fade_out,
android.R.anim.fade_in, android.R.anim.fade_out)
您的动画不起作用,因为您没有使用正确的属性。您需要将valueFrom
和valueTo
替换为补间动画的相应 attr。
阿尔法
valueFrom
变得fromAlpha
valueTo
变得toAlpha
旋转
valueFrom
变得fromDegrees
valueTo
变得toDegrees
您还需要添加pivotX
和pivotY
属性。
旋转 y
pivotX="50%"
pivotY="0%"