私は現在このチュートリアルを読んでいます:
http://developer.Android.com/training/animation/cardflip.html
onフラグメントのアニメーションを反転。残念ながら、object-animatorはAndroid.app.Fragmentでのみ使用でき、support Fragmentでは使用できません。
スケールアニメーションと回転アニメーションを使用して、.xmlアニメーションを再構築しようとしました。しかし、現在、アニメーションは実行されておらず、animations .xmlファイルで設定した時間が経過すると、反転する代わりに他のフラグメントが表示されます。
これが私の.xmlアニメーションです: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:anim/accelerate_decelerate_interpolator"
Android:duration="800"/>
<!-- Half-way through the rotation (see startOffset), set the alpha to 1. -->
<alpha
Android:valueFrom="0.0"
Android:valueTo="1.0"
Android:startOffset="400"
Android:duration="1" />
</set>
flip_left_out.xml
<set xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<!-- Rotate. -->
<rotate
Android:duration="800"
Android:interpolator="@Android:anim/accelerate_decelerate_interpolator"
Android:propertyName="rotationY"
Android:valueFrom="0"
Android:valueTo="180" />
<!-- Half-way through the rotation (see startOffset), set the alpha to 0. -->
<alpha
Android:duration="1"
Android:propertyName="alpha"
Android:startOffset="400"
Android:valueFrom="1.0"
Android:valueTo="0.0" />
</set>
flip_right_in.xml
<set xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<!-- Before rotating, immediately set the alpha to 0. -->
<alpha
Android:duration="0"
Android:propertyName="alpha"
Android:valueFrom="1.0"
Android:valueTo="0.0" />
<!-- Rotate. -->
<rotate
Android:duration="800"
Android:interpolator="@Android:anim/accelerate_decelerate_interpolator"
Android:propertyName="rotationY"
Android:valueFrom="180"
Android:valueTo="0" />
<!-- Half-way through the rotation (see startOffset), set the alpha to 1. -->
<alpha
Android:duration="1"
Android:propertyName="alpha"
Android:startOffset="400"
Android:valueFrom="0.0"
Android:valueTo="1.0" />
</set>
flip_right_out.xml
<set xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<!-- Rotate. -->
<rotate
Android:duration="800"
Android:interpolator="@Android:anim/accelerate_decelerate_interpolator"
Android:propertyName="rotationY"
Android:valueFrom="0"
Android:valueTo="-180" />
<!-- Half-way through the rotation (see startOffset), set the alpha to 0. -->
<alpha
Android:duration="1"
Android:propertyName="alpha"
Android:startOffset="400"
Android:valueFrom="1.0"
Android:valueTo="0.0" />
</set>
そして、これらが実行されるコードは次のとおりです。
FragmentTransaction trans = getActivity().getSupportFragmentManager().beginTransaction();
trans.setCustomAnimations(R.anim.flip_right_in, R.anim.flip_right_out,
R.anim.flip_left_in, R.anim.flip_left_out);
trans.addToBackStack(null);
trans.replace(R.id.content_frame, new MyFragment()).commit();
NineOldAndroids を使用できます。 Honeycomb(Android 3.0)アニメーションAPIをAndroid 1.0にバックポートします。ObjectAnimator、ValueAnimator、その他すべての優れた機能を利用できます。
よろしくお願いします。
私はなんとか問題を解決することができました。このソリューションは、NineOldAndroidsと、NineOldAndroidsのsupport-v4サポートを備えた別のライブラリと関係があります。
私がしたこと:
以下のapi <3をサポートしていない場合
次のコードと同じコードを使用してください: https://stuff.mit.edu/afs/sipb/project/Android/docs/training/animation/cardflip.html
次のようにflipCardメソッドを微調整しました。
private void flipCard() {
if (mShowingBack) {
mShowingBack = false;
FragmentTransaction trans = getActivity().getFragmentManager().beginTransaction();
trans.setCustomAnimations(R.animator.card_flip_right_in,
R.animator.card_flip_right_out,
R.animator.card_flip_left_in,
R.animator.card_flip_left_out)
.replace(R.id.memberCardContainer, new CardFrontFragment())
.commit();
return;
}
// Flip to the back.
mShowingBack = true;
FragmentTransaction trans = getActivity().getFragmentManager().beginTransaction();
trans.setCustomAnimations(R.animator.card_flip_right_in,
R.animator.card_flip_right_out,
R.animator.card_flip_left_in,
R.animator.card_flip_left_out)
.replace(R.id.memberCardContainer, new CardBackFragment())
.commit();
}