84

サポートパッケージv4でGoogleAPI8(Android 2.2)を使用しています。

エラーやアニメーションは発生しません。

取引:

FragmentTransaction transaction = manager.beginTransaction();       
transaction.replace(R.id.content, myFragment);
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
transaction.commit();

アニメーション:

slide_in_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate
        android:duration="700"
        android:fromXDelta="-100%"
        android:toXDelta="0%" >
    </translate>
</set>

slide_out_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="700"
        android:fromXDelta="0%"
        android:toXDelta="100%" >
    </translate>
</set>

ここで何が起こっているのか誰か知っていますか?

4

5 に答える 5

263

アニメーションを設定する前にマネージャーがトランザクションをスタックしていたため、アニメーションなしでトランザクションをスタックします(悲しいが本当です)。これは、後にトランザクションをコミットした場合でも発生しsetCustomAnimations()ます。

解決策は、最初にアニメーションを設定することです。

FragmentTransaction transaction = manager.beginTransaction();       
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
transaction.replace(R.id.content, myFragment);
transaction.commit();
于 2012-06-19T19:48:57.110 に答える
25

上で示唆したように、別々のステートメントは間違いなく機能します。ただし、ここでの秘訣setCustomAnimationは、トランザクションタイプを設定する前です。add、、replaceなど。それ以外の場合はそうではありません。したがって、同じロジックを適用してmethod chainingも機能します。例えば。

getSupportFragmentManager()
        .beginTransaction()
        .setCustomAnimations(R.anim.a_slide_up,
                             R.anim.a_slide_down,
                             R.anim.a_slide_up,
                             R.anim.a_slide_down)
        .add(R.id.root_layout, 
             MyFrag.newInstance())
        .addToBackStack("MyFrag")
        .commit();

ここに置くと、好きな人がmethod chaining役立つと思うようになります。乾杯!

于 2016-02-12T14:17:47.247 に答える
7

これは最も人気のある質問なので、ここに残しておきます。フラグメントトランザクションがアニメーション化されないという同じ問題がありました。犯人は、含まれているレイアウトで属性がにandroid:animateLayoutChanges設定されていました。true

異なるファイルにネストされたレイアウトがあると気づきにくいので、誰かが解決策を探す時間を節約するのに役立つことを願っています。

于 2017-10-09T15:36:44.713 に答える
0

もう1つの理由は、fragmentTransaction.show()コミット前に不必要に配置することです。これにより、一部のAndroidAPIバージョンでポップトランジションが表示されなくなります。

于 2018-10-02T12:53:44.557 に答える
0

私にとって問題は、Fragment.getChildFragmentManager()私が切り替えた使用でFragment.getParentFragmentManager()あり、アニメーションが突然機能し始めました。

于 2021-05-02T13:57:46.297 に答える