[android] フラグメントトランザクションアニメーション:スライドインとスライドアウト



Answers

フラグメント化されたトランザクション・アニメーションには3つの方法があります。

トランジション

したがって、組み込みトランジションの1つを使用する必要がある場合は、setTranstion()メソッドを使用します。

getSupportFragmentManager()
        .beginTransaction()
        .setTransition( FragmentTransaction.TRANSIT_FRAGMENT_OPEN )
        .show( m_topFragment )
        .commit()

カスタムアニメーション

setCustomAnimations()メソッドを使用してアニメーションをカスタマイズすることもできます。

getSupportFragmentManager()
        .beginTransaction()
        .setCustomAnimations( R.anim.slide_up, 0, 0, R.anim.slide_down)
        .show( m_topFragment )
        .commit()

slide_up.xml

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:propertyName="translationY"
        android:valueType="floatType"
        android:valueFrom="1280"
        android:valueTo="0"
        android:duration="@android:integer/config_mediumAnimTime"/>

slide_down.xml

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:propertyName="translationY"
        android:valueType="floatType"
        android:valueFrom="0"
        android:valueTo="1280"
        android:duration="@android:integer/config_mediumAnimTime"/>

複数のアニメーション

最後に、単一のトランザクションで複数のフラグメントアニメーションを開始することも可能です。 これにより、片方のフラグメントが上にスライドし、もう片方が同時に下にスライドするような非常にクールなエフェクトが可能になります:

getSupportFragmentManager()
        .beginTransaction()
        .setCustomAnimations( R.anim.abc_slide_in_top, R.anim.abc_slide_out_top ) // Top Fragment Animation
        .show( m_topFragment )
        .setCustomAnimations( R.anim.abc_slide_in_bottom, R.anim.abc_slide_out_bottom ) // Bottom Fragment Animation
        .show( m_bottomFragment )
        .commit()

詳細はURLをご覧ください

注:上記の問題があるかもしれないので、あなたの要件に応じてアニメーションをチェックすることができます。

Question

フラグメント間のアニメーショントランザクションのチュートリアルを確認しました。 私はこのメソッドをアニメーションに使用しました:

fragmentTransaction.setCustomAnimations(android.R.anim.slide_in_left,
                android.R.anim.slide_out_right);

それは動作します。 しかし、私はそれが反転されたアニメーションを望む:古いフラグメントが左にスライドし、新しいフラグメントが右にスライドするが、R.animファイルの価値は私の範囲にとって有用ではないようだ。 どうすればいいですか?




私は同じ問題を抱えている、私は単純な解決策を使用

1)animフォルダにslides_out_right.xmlを作成する

  <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromXDelta="0" android:toXDelta="-50%p"
            android:duration="@android:integer/config_mediumAnimTime"/>
        <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
            android:duration="@android:integer/config_mediumAnimTime" />
    </set>

2)animフォルダ内にsliding_in_left.xmlを作成する

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="50%p" android:toXDelta="0"
        android:duration="@android:integer/config_mediumAnimTime"/>
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
        android:duration="@android:integer/config_mediumAnimTime" />
</set>

3)単純に2つのカスタムxmlとアニメーション用の2つのデフォルトxmlを持つフラグメントトランザクションsetCustomeAnimations()を次のように使用します。

 fragmentTransaction.setCustomAnimations(R.anim.sliding_in_left, R.anim.sliding_out_right, android.R.anim.slide_in_left, android.R.anim.slide_out_right );



Related