web-dev-qa-db-ja.com

FragmentTransation setCustomAnimationsが機能しない

新しいAndroid互換性パッケージを使用して、フラグメントをプロジェクトに含めようとしています。新しいフラグメントを追加するときに、遷移アニメーションを含めようとしています。これは、アニメーション作品の1つにすぎません。 Inアニメーションは機能しますが、Outアニメーションは機能しません。互換性パッケージのバグであるとどこかで読みましたが、互換性パッケージの第3リビジョンでバグが修正されたことも読みました。問題

アニメーションで

<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:interpolator="@Android:anim/anticipate_interpolator"
Android:fromXDelta="0"
Android:toXDelta="0"
Android:fromYDelta="100%"        
Android:toYDelta="0%"
Android:duration="1000"/>

アウトアニメーション

<translate xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:interpolator="@Android:anim/accelerate_interpolator"
Android:fromXDelta="0"
Android:toXDelta="0"
Android:zAdjustment="top"
Android:fromYDelta="0%"        
Android:toYDelta="100%"
Android:duration="1000"/>

これは私がフラグメントを追加するために使用するコードです

newFragment = new HelloWorldFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.bottom_top_animation, R.anim.top_bottom_animation);
ft.add(R.id.outer_layout, newFragment);
ft.addToBackStack(null);
ft.commit();
26
blessenm

これは現在のバージョンのライブラリで機能しますが、以前は間違いなく壊れていました。次のようなものを使用できます。

final FragmentManager fm = getSupportFragmentManager();
final FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(R.anim.slide_up, R.anim.slide_down, R.anim.slide_up, R.anim.slide_down)
  .add(R.id.fragment_container, new SomeFragment(), FRAGMENT_TAG)
  .addToBackStack(FRAGMENT_TAG)
  .commit();

ここで、R.anim.slide_upはインアニメーションで、R.anim.slide_downはアウトアニメーションです。 setCustomAnimationsの2番目のパラメーターのペア(3と4)を使用すると、バックスタックをポップするためのポップイン/アウトアニメーションを指定できます(たとえば、ユーザーが押し戻すと、フラグメントは4番目のパラメーターとして指定されたアニメーションでアニメーション化されます)。

19
Ian G. Clifton

これの回避策を見つけました。フラグメントクラスのonCreateAnimation(inttransit、boolean enter、int nextAnim)をオーバーライドすると、正常に機能します。

@Override
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
    return enter ? AnimationUtils.loadAnimation(getActivity(), R.anim.grow_fade_in_center) : AnimationUtils.loadAnimation(getActivity(), R.anim.shrink_fade_out_center);
}
7
Mohit Chauhan

私も同じ問題に直面しています、これが私の状況です:

  1. 終了アニメーションの後でUIを変更したい。しかし、出口アニメーションが機能しないことがわかりました。私のUI変更コードはonBackPressed()にあります。

私の解決策は次のとおりです:

  1. onCreateAnimator()のUI変更ロジックを移動します。アニメーションを終了します。
1
soolaugust