2010-12-15 11 views
12

Załóżmy, że mam 2 pliki XML i moja aktywność ustawiContentView odpowiednią na podstawie naciśnięcia przycisku od użytkownika. Czy można zmienić animację przejścia dla zmiany widoku treści?Czy można wykonywać animacje przejścia podczas zmiany widoków w tym samym działaniu?

Do tej pory widzę super.overridePendingTransition(), która nadaje się do rozpoczynania nowych działań, jednak mój przykład nie uruchamia nowej aktywności, po prostu zmienia układ w bieżącym.

Odpowiedz

31

Mathias Lin wyjaśnił to bardzo dobrze.

Zawsze możesz użyć domyślnych animacji dostępnych w systemie Android.

Herezje przykładowy kod:

boolean isFirstXml=evaluatingConditionFunction(); 
LayoutInflater inflator=getLayoutInflater(); 
View view=inflator.inflate(isFirstXml?R.layout.myfirstxml:R.layout.myseconxml, null, false); 
view.startAnimation(AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right)); 
setContentView(view); 

nazywają to z jednego z aktywności, która posiada rodzica View.

W przypadku niestandardowych animacji możesz odwiedzić dokumenty programisty. Oto link documentation.

7

Tak, można zastosować animację w prawie każdym widoku, który lubisz. Wystarczy view.startAnimation(animation);

Weź zewnętrzną grupę viewgroup danego układu (widok zawartości) i zastosuj do niego animację. W zależności od rodzaju animacji, którą chcesz wykonać, sensowne może być nadmuchanie/załadowanie obu układów, ale ukryć jeden z nich, a następnie zamienić. Proszę określić, jakiego rodzaju przejścia masz na myśli.

Na przykład: jeśli wykonasz przejście alfa, uruchom program alphaAnimation na bieżącym layoucie, gdy po zakończeniu animacji (AnimationListener) ustawisz widok zawartości na nowy układ i ponownie zanikniesz zawartość, przez inną alfaAnimację.

3

Lepszym rozwiązaniem jest skorzystanie z ViewFlipper: jest to FrameLayout, który może tworzyć animacje podczas zmiany widoków.

<ViewFlipper 
    android:id="@+id/[your_id_here]" 
    android:inAnimation="..." 
    android:outAnimation="..." 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
     <RelativeLayout 
      <!--Your first layout --> 
     </RelativeLayout> 
     <RelativeLayout 
      <!--Your second layout --> 
     </RelativeLayout> 
</ViewFlipper> 

Następnie przełączyć widoki z setDisplayedChild(int) lub showNext() lub showPrevious. Jeśli chcesz mieć inną animację dla ruchu lewego i prawego, musisz ustawić inAnimation i outAnimation w kodzie przed przejściem.

Bardziej kompletnym przykładem jest here.

+0

Dziękuję. To znacznie prostsze niż rozpoczęcie drugiej czynności z animacją, którą zrobiłem przy użyciu 'oldActivity.startActivity (newActivityIntent); oldActivity.overridePendingTransition (R.anim.slide_in_up, R.anim.slide_out_up); ' –

Powiązane problemy