29

新しい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();
4

4 に答える 4

23

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

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番目のパラメータとして指定されたアニメーションでアニメーション化されます)。

于 2012-01-03T21:44:27.317 に答える
8

私はこれの回避策を見つけました。フラグメントクラスの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);
}
于 2015-06-12T10:18:41.773 に答える
1

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

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

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

  1. onCreateAnimator()でUI変更ロジックを移動します。その後、アニメーションを終了します。
于 2018-02-22T01:43:11.960 に答える
0

以下の例を使用してください。

 private fun gotoFragment(fragment:Fragment){
     parentFragmentManager.commit {
        setCustomAnimations(
             R.anim.slide_in,
           R.anim.fade_out,
              R.anim.fade_in,
             R.anim.slide_out
        )
         setReorderingAllowed(true)
        replace(R.id.fragment_dashboard_container, fragment)
        addToBackStack(null)
    }
}

これがドキュメントフラグメントトランザクションです

于 2021-10-08T06:43:16.783 に答える