Wprowadzenie do animacji

Wypróbuj Compose
Jetpack Compose to zalecany zestaw narzędzi interfejsu na Androida. Dowiedz się, jak używać animacji w Compose.

Animacje mogą dodawać wizualne wskazówki, które informują użytkowników o tym, co dzieje się w aplikacji. Są one szczególnie przydatne, gdy interfejs zmienia stan, np. gdy wczytują się nowe treści lub stają się dostępne nowe działania. Animacje nadają aplikacji dopracowany wygląd, co sprawia, że jest ona postrzegana jako bardziej profesjonalna.

Android zawiera różne interfejsy API animacji w zależności od tego, jakiego rodzaju animacji chcesz użyć. W tej dokumentacji znajdziesz omówienie różnych sposobów dodawania ruchu do interfejsu.

Aby lepiej zrozumieć, kiedy warto używać animacji, zapoznaj się też z przewodnikiem Material Design dotyczącym ruchu.

Animowanie bitmap

Rysunek 1. Animowany obiekt rysowalny.

Aby animować grafikę bitmapową, np. ikonę lub ilustrację, użyj interfejsów API animacji rysowalnych. Zwykle te animacje są definiowane statycznie za pomocą zasobu rysowalnego, ale możesz też zdefiniować zachowanie animacji w czasie działania programu.

Na przykład dobrym sposobem na poinformowanie użytkownika, że 2 działania są ze sobą powiązane, jest animacja przycisku odtwarzania, który po kliknięciu zmienia się w przycisk wstrzymania.

Więcej informacji znajdziesz w artykule Animowanie grafiki rysowanej.

Animowanie widoczności i ruchu interfejsu

Rysunek 2. Subtelna animacja pojawiania się i znikania okna sprawia, że zmiana interfejsu jest mniej gwałtowna.

Gdy musisz zmienić widoczność lub położenie widoków w układzie, najlepiej dodać subtelne animacje, aby użytkownik mógł zrozumieć, jak zmienia się interfejs.

Aby przesuwać, odkrywać lub ukrywać widoki w bieżącym układzie, możesz używać systemu animacji właściwości udostępnianego przez pakiet android.animation, który jest dostępny w Androidzie 3.0 (poziom interfejsu API 11) i nowszych wersjach. Te interfejsy API aktualizują właściwości obiektów View w określonym czasie, stale odświeżając widok w miarę zmian właściwości. Jeśli na przykład zmienisz właściwości pozycji, widok przesunie się po ekranie. Gdy zmienisz właściwość alpha, widok będzie się pojawiać lub znikać.

Najprostszym sposobem tworzenia tych animacji jest włączenie animacji w układzie, aby po zmianie widoczności widoku animacja była stosowana automatycznie. Więcej informacji znajdziesz w artykule Automatyczne animowanie zmian układu.

Aby dowiedzieć się, jak tworzyć animacje za pomocą systemu animacji właściwości, przeczytaj omówienie animacji właściwości. Aby utworzyć typowe animacje, możesz też zapoznać się z tymi stronami:

Ruch oparty na fizyce

Rysunek 3. Animacja utworzona za pomocą klasy ObjectAnimator.

Rysunek 4. Animacja utworzona za pomocą interfejsów API opartych na fizyce.

W miarę możliwości stosuj w animacjach prawa fizyki, aby wyglądały naturalnie. Powinni na przykład utrzymać tempo, gdy zmieni się ich cel, i płynnie przechodzić do nowych działań.

Aby zapewnić takie zachowania, biblioteka pomocy Androida zawiera interfejsy API animacji opartej na fizyce, które wykorzystują prawa fizyki do kontrolowania sposobu działania animacji.

Oto 2 typy animacji oparte na fizyce:

Animacje, które nie są oparte na fizyce, np. te utworzone za pomocą interfejsów API ObjectAnimator, są dość statyczne i mają stały czas trwania. Jeśli wartość docelowa ulegnie zmianie, musisz anulować animację w momencie zmiany wartości docelowej, ponownie skonfigurować animację z nową wartością jako nową wartością początkową i dodać nową wartość docelową. Wizualnie ten proces powoduje nagłe zatrzymanie animacji i niezsynchronizowany ruch po nim, jak pokazano na rysunku 3.

Animacje utworzone za pomocą interfejsów API animacji opartych na fizyce, takich jak DynamicAnimation, są napędzane siłą. Zmiana wartości docelowej powoduje zmianę siły. Nowa siła jest stosowana do dotychczasowej prędkości, co zapewnia płynne przejście do nowego celu. Dzięki temu animacja wygląda bardziej naturalnie, co widać na rysunku 4.

Animowanie zmian układu

Rysunek 5. Animację pokazującą więcej szczegółów można uzyskać, zmieniając układ lub rozpoczynając nową aktywność.

W Androidzie 4.4 (poziom interfejsu API 19) i nowszym możesz używać platformy przejść, aby tworzyć animacje podczas zamiany układu w bieżącej aktywności lub fragmencie. Wystarczy, że określisz układ początkowy i końcowy oraz rodzaj animacji, której chcesz użyć. Następnie system określa i wykonuje animację między tymi 2 układami. Możesz użyć tej funkcji, aby zamienić cały interfejs lub przenieść albo zastąpić tylko niektóre widoki.

Gdy na przykład użytkownik kliknie element, aby wyświetlić więcej informacji, możesz zastąpić układ szczegółami elementu, stosując przejście podobne do tego, które widać na rysunku 5.

Układ początkowy i końcowy są przechowywane w Scene, chociaż scena początkowa jest zwykle określana automatycznie na podstawie bieżącego układu. Tworzysz Transition, aby poinformować system, jakiego typu animację chcesz zastosować, a następnie wywołujesz TransitionManager.go(). System uruchamia animację, aby zamienić układy.

Więcej informacji znajdziesz w artykule Animowanie zmian układu za pomocą przejścia. Przykładowy kod znajdziesz w BasicTransition.

Animowanie przejść między aktywnościami

W Androidzie 5.0 (poziom interfejsu API 21) i nowszym możesz też tworzyć animacje, które przechodzą między aktywnościami. Opiera się na tej samej strukturze przejść, która została opisana w poprzedniej sekcji, ale umożliwia tworzenie animacji między układami w osobnych aktywnościach.

Możesz zastosować proste animacje, takie jak wsuwanie nowego działania z boku lub jego pojawianie się z efektem zanikania, ale możesz też tworzyć animacje, które przechodzą między udostępnionymi widokami w każdym działaniu. Gdy na przykład użytkownik kliknie element, aby wyświetlić więcej informacji, możesz przejść do nowej aktywności z animacją, która płynnie powiększa ten element, aby wypełnić ekran, tak jak w animacji pokazanej na rysunku 5.

Jak zwykle wywołujesz funkcję startActivity(), ale przekazujesz jej pakiet opcji dostarczonych przez ActivityOptions.makeSceneTransitionAnimation(). Ten pakiet opcji może zawierać informacje o tym, które widoki są udostępniane między aktywnościami, aby struktura przejść mogła je połączyć podczas animacji.

Dodatkowe materiały: