Bagaimana untuk Membalikkan Fragmen Animasi pada BackStack?

Saya pikir sistem akan membalikkan animasi pada backstack ketika tombol kembali ditekan bila menggunakan fragmen menggunakan kode berikut:

FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out);
ft.replace(R.id.viewContainer, new class(), "layout").addToBackStack(null).commit();
Larutan

Menurut android dokumentasi untuk custom animation:

Perubahan:

ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out);

Untuk:

ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out, R.anim.hyperspace_in, R.anim.slide_out );

dan sekarang backstack menjiwai - In reverse!!

Komentar (3)

Gunakan animasi yang Benar Saya telah menggunakan kode berikut dan bekerja seperti pesona

slide_in_left.xml

<?xml version="1.0" encoding="utf-8"?>


slide_in_right.xml

 <?xml version="1.0" encoding="utf-8"?>




slide_out_left.xml





slide_out_right.xml

<?xml version="1.0" encoding="utf-8"?>




Kemudian Gunakan berikut sambil menambahkan fragmen

setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left,
                                R.anim.slide_out_right, R.anim.slide_in_right)

dan itu akan bekerja 100%

Komentar (4)

dalam kasus saya

ft.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right, 
                       R.anim.slide_in_right, R.anim.slide_out_left);

akan membuat animasi yang sempurna.

slide_in_right

<?xml version="1.0" encoding="utf-8"?>



slide_out_left

<?xml version="1.0" encoding="utf-8"?>



Komentar (0)
.setCustomAnimations(R.animator.fragment_fade_in,
        R.animator.fragment_fade_out,
        R.animator.fragment_fade_p_in,
        R.animator.fragment_fade_p_out)

Ganti kode di atas dengan:

mFragmentManager.beginTransaction()
    .setCustomAnimations(R.animator.fragment_fade_in,
            R.animator.fragment_fade_out,
            R.animator.fragment_fade_p_in,
            R.animator.fragment_fade_p_out)
    .replace(R.id.main_container, FragmentPlayerInfo.getInstance(data))
    .addToBackStack(FragmentPlayerInfo.TAG)
    .commit();
Komentar (3)

ini bekerja untuk saya!! kode ini untuk fragmen! jika anda ingin menggunakan kode ini dalam kegiatan, menghapus pada awal getActivity()!!

getActivity().getSupportFragmentManager()
        .beginTransaction()
        .setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.fade_out,android.R.anim.slide_in_left, android.R.anim.fade_out)
        .replace(R.id.fragment_container, new YourFragment)
        .addToBackStack(null)
        .commit();

Good luck untuk anda!!

Komentar (0)

Hal ini sebagaimana yang disebutkan dalam Fragmen Transaksi kelas .

/**
     * Set specific animation resources to run for the fragments that are
     * entering and exiting in this transaction. The <code>popEnter</code>
     * and <code>popExit</code> animations will be played for enter/exit
     * operations specifically when popping the back stack.
     *
     * @param enter An animation or animator resource ID used for the enter animation on the
     *              view of the fragment being added or attached.
     * @param exit An animation or animator resource ID used for the exit animation on the
     *             view of the fragment being removed or detached.
     * @param popEnter An animation or animator resource ID used for the enter animation on the
     *                 view of the fragment being readded or reattached caused by
     *                 {@link FragmentManager#popBackStack()} or similar methods.
     * @param popExit An animation or animator resource ID used for the enter animation on the
     *                view of the fragment being removed or detached caused by
     *                {@link FragmentManager#popBackStack()} or similar methods.
     */
    @NonNull
    public abstract FragmentTransaction setCustomAnimations(@AnimatorRes @AnimRes int enter,
            @AnimatorRes @AnimRes int exit, @AnimatorRes @AnimRes int popEnter,
            @AnimatorRes @AnimRes int popExit);

jadi akhirnya anda dapat menggunakan metode seperti ini

 mFragmentManager.beginTransaction()
                        .replace(R.id.container, fragment)
                        .setCustomAnimations(R.anim.slide_left,//enter
                                             R.anim.slide_out_left,//exit
                                             R.anim.slide_right,//popEnter
                                             R.anim.slide_out_right)//popExit
                        .addToBackStack(fragment.toString())
                        .commit();
Komentar (0)