Fragment standard transition not animation

Używam biblioteki zgodności z Androidem v4 do tworzenia interfejsu użytkownika tabletu przy użyciu fragmentów specjalnie dla urządzeń z Androidem 2.2 i nowszych.

Wszystko działa tak jak powinno, poza tym, że nie mogę uruchomić żadnych animacji, nawet standardowych animacji.

Kod:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ABCFragment abcFragment = new ABCFragment();
    ft.replace(R.id.main_frame_layout_fragment_holder,abcFragment);     
    ft.addToBackStack(null);
    ft.commit();

Zamiast użyć animacji tranzytowej, fragment zamarza na około sekundę, po prostu znika i pojawia się nowy.

Użycie:

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

Nie działa ani jedno, ani drugie.

XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.synergygb.mycustomapp"
android:id="@+id/LinearLayout01" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="vertical"
android:gravity="bottom">
<FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/main_frame_layout_fragment_holder">
</FrameLayout>
<!-- OTHER FIXED UI ELEMENTS-->
</RelativeLayout>

Czytałem, że niestandardowe animacje zostały złamane w bibliotece zgodności, ale nikt nie wydaje się mieć problemów ze standardowymi przejściami. Testowałem to na 3.2.1 Motorola Xoom, 2.3 Galaxy Tab 7", emulator 2.2, a nawet na HTC G2 z 2.3.4.

Co tu może być nie tak?
Author: hichris123, 2011-10-11

6 answers

W końcu udało mi się to po wielu próbach i błędach.

Po pierwsze i najważniejsze, Uzyskaj najnowszy ACL, naprawił niestandardowe animacje i chociaż nie był to mój dokładny problem, gdy te zadziałały, skończyło się na użyciu ich zamiast standardowych przejść.

Teraz używam:

ft.setCustomAnimations(android.R.anim.fade_in,android.R.anim.fade_out,android.R.anim.fade_in,android.R.anim.fade_out);
Kluczem do tego, aby działał zarówno na Androidzie 2.1, 2.2 i 2.3, jak i Androidzie 3.0+ było wykonanie następujących czynności:]}
  • upewnij się, że używasz tylko API dostępnych dla najniższego API Poziom, który chcesz wspierać (w moim przypadku 2.1).
  • skompilować używając Androida 3.0.
  • w pliku manifest Ustaw android:hardwareAccelerated="true" wewnątrz znacznika aplikacji.

Animacje fragmentów działają teraz na wszystkich urządzeniach. Jeśli nie ustawisz dodatkowych informacji w tagu aplikacji, animacja będzie ocurr, ale w bardzo niestabilny sposób, co wydaje się, że nie stało się w ogóle.

Mam nadzieję, że to pomoże komuś w przyszłości!

Dla przypomnienia, istnieje kilka narzędzi do sprawdzania API, więc jesteś pewien, że nie używaj żadnych API, które są dostępne dla ciebie. Wolę pracować na 2.1, więc IDE nie pokazuje niczego, czego nie mogę użyć, gdy mam stabilny kod, wracam do kompilacji na 3.0

 36
Author: blindstuff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-25 16:28:19

Spróbuj ponownie pobrać najnowszy ACL, naprawili go: http://code.google.com/p/android/issues/detail?id=15623#c19

Zauważyłem również, że dla setCustomAnimations, musi być ustawiony przed wywołaniami transakcji, takimi jak replace, aby uzyskać efekt.

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.in_from_left, R.anim.out_to_right, R.anim.in_from_right, R.anim.out_to_left);
ft.replace(android.R.id.content, newFrag);
ft.addToBackStack(null);
ft.commit();
 33
Author: dvd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-24 23:41:31

Aby wykonać animację top_to_bottom dla fragmentu,

Wykonaj to samo, aby zrobić od góry do dołu

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.top_to_bottom_fragment,
android.R.animator.fade_out); ft.replace(R.id.simple_fragment,
fragment); 
ft.commit();

Top_to_bottom_fragment.xml

<objectAnimator android:duration="400" android:valueFrom="-800"
    android:valueTo="0" android:propertyName="y"
    android:valueType="floatType"
    xmlns:android="http://schemas.android.com/apk/res/android" />

Gdzie valueFrom="-800" wskaż dolny układ fragmentu.

 4
Author: CoDe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-10 13:04:53

Dodałem obsługę NineOldAndroids do biblioteki wsparcia Google. Zobacz http://www.github.com/kedzie/Support_v4_NineOldAndroids Po szczegóły. Umożliwia korzystanie z animacji właściwości dla Przejść fragmentów, Pagetransformatorów i innych rzeczy.

 3
Author: mark.kedzierski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-27 03:33:45

Musisz zadzwonić setCustomAnimations przed dodajesz fragment. Umożliwia to dodawanie wielu fragmentów z różnymi animacjami.

 3
Author: Greg Ennis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-04 04:10:13

Mam nadzieję, że to komuś pomoże. Dokumenty API mówią o używaniu objectanimatora do animacji fragmentów, ale nawet z najnowszą kompatybilnością pakiet objectAnimator w xml nie został zaakceptowany przez kompilator.

To działa dla mnie:

Dla Androida 3.0 lub nowszego: zadeklaruj obiekt XML w folderze res / animator.

With Compatibility package for less than 3.0: declare XML animation in res / anim folder.

 0
Author: Gunnar Karlsson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-12 04:07:13