Cum de a inversa fragmente de animații pe BackStack?

M-am gândit că sistemul va inversa animațiile pe backstack atunci când butonul din spate este apăsat atunci când se utilizează fragmente folosind codul următor:

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();
0

4 răspunsuri

În conformitate cu documentația Android pentru animația personalizată :

Schimbare:

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

La:

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

iar acum, backstack-ul animă - În sens invers!

0
adăugat
Mulțumesc foarte mult. Mare răspuns.
adăugat autor Vipul Purohit, sursa
Hi im, de fapt, folosind tranziția de conținut, este de lucru bine, dar atunci când am apăsa înapoi și du-te la fragmentul anterior fundal doar disapear animate de opinii, dar, de asemenea, suprapunerea cu cele prevoioase, orice fel de a evita acest lucru?
adăugat autor user3497504, sursa
btw, stiu ca acest lucru nu este conectat la intrebarea si raspunsul tau, dar ai putea sa te legi de ceva cu ceva care explica putin customAnimations? : P
adăugat autor AreusAstarte, sursa
adăugat autor mDroidd, sursa
FUUUUUUDGE !! Domnule, sunteți o legendă! mulțumesc foarte mult!!
adăugat autor klutch, sursa

Utilizați animația corectă Am folosit următoarele lucruri și munca lor ca un farmec

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"?>


    


Apoi folosiți următorul text în timp ce adăugați fragment

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

și va lucra 100%

0
adăugat
Rețineți că acest lucru nu va funcționa dacă utilizați managerul de fragmente de suport sau dacă fragmentul dvs. extinde versiunea de suport a Fragmentului
adăugat autor w3bshark, sursa
@DanielShatz Trebuie să utilizați mai degrabă traduceri decât objectAnimators. De exemplu, slide_in_left.xml ar fi: Vezi răspunsul: stackoverflow.com/a/5151774/1738090
adăugat autor w3bshark, sursa
@ w3bshark Cum să obțineți astfel de animații utilizând FragmentManager și Fragment din biblioteca de suport?
adăugat autor Daniel Shatz, sursa
Am încercat asta (pe dispozitivul Marshmallow - nu încerca alte versiuni). Nu funcționează. fragmentul FragmentTransaction finalTransaction = getFragmentManager() beginTransaction (); fragmentTransaction.setCustomAnimations (R.anim.enter_from_ri & zwnj; ght, R.anim.exit_to_left, R.anim.enter_from_left, R.anim.exit_to_right); fragmentTransaction.replace (R.id.fl_right_container, detailFragment); fragmentTransaction.replace (R.id.fl_left_container, subcategoriesFragment, TestActivity.TAG_SUBCATEGORIES_FRAGMENT); fragmentTransaction.commit ();
adăugat autor techtinkerer, sursa
.setCustomAnimations(R.animator.fragment_fade_in,
        R.animator.fragment_fade_out,
        R.animator.fragment_fade_p_in,
        R.animator.fragment_fade_p_out)

Înlocuiți cele de mai sus cu:

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();
0
adăugat
Vă recomand să adăugați o explicație cu privire la modul în care vă ajută recomandarea.
adăugat autor Wtower, sursa
Nu știu de ce funcționează (:, dar când a fost adăugată animație după replace și addToBackstack , nu este procesată
adăugat autor TarikW, sursa
@TarikW Sunt cam târziu, dar ordinea este importantă în acest sens, trebuie să apelați setCostomAnimations înainte de a înlocui, addToBackStack metode
adăugat autor Tahir, sursa

În cazul meu

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

ar crea o animație perfectă.

slide_in_right

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

    <translate android:fromXDelta="50%p" android:toXDelta="0"
               android:duration="@android:integer/config_mediumAnimTime"/>
    

slide_out_left

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

    <translate android:fromXDelta="0" android:toXDelta="-50%p"
               android:duration="@android:integer/config_mediumAnimTime"/>
    

0
adăugat
Cool ... A lucrat pentru mine.
adăugat autor Rahul Tiwari, sursa
Android dezvoltatori, România — Moldova
Android dezvoltatori, România — Moldova
27 participanți

Parteneri: ciupacabra.com, @php_ro, @js_ro, @node_ro iOS: @ro_ios Reguli: https://github.com/js-ro/it-telegram/blob/master/RULES.md