Wyświetl animację

Do wyświetlania animacji Tweened w widokach możesz używać systemu animacji wyświetlania. Animacja starszej wersji oblicza animację na podstawie informacji takich jak punkt początkowy i końcowy, rozmiar, obrót i inne typowe aspekty animacji.

Animacja pośrednia może wykonać serię prostych przekształceń (położenie, rozmiar, obrót i przezroczystość) zawartości obiektu widoku. Jeśli masz obiekt TextView, możesz go przesuwać, obracać, zwiększać lub zmniejszać. Jeśli zawiera obraz tła, zostanie on przekształcony razem z tekstem. animation package zawiera wszystkie klasy używane w animacji.

Sekwencja instrukcji animacji definiuje animację typu tween zdefiniowany w kodzie XML lub Androida. Podobnie jak w przypadku definiowania układu zalecany jest plik XML, ponieważ jest on bardziej czytelny, wielokrotnego użytku i wymienny niż kodowanie na stałe animacji. W poniższym przykładzie używamy kodu XML. (Więcej informacji o definiowaniu animacji w kodzie aplikacji zamiast XML znajdziesz w klasie AnimationSet i innych podklasach Animation).

Instrukcje animacji określają transformacje, które mają zostać wykonane, czas ich wystąpienia i czas ich zastosowania. Przekształcenia mogą być sekwencyjne lub jednoczesne. Na przykład zawartość obiektu TextView może być przesuwana od lewej do prawej, a potem obracana o 180 stopni, albo tekst może być przesuwany i obracany jednocześnie. Każde przekształcenie przyjmuje zestaw parametrów specyficznych dla tego przekształcenia (rozmiar początkowy i końcowy przy zmianie rozmiaru, kąt początkowy i końcowy obrotu itd.), a także zestaw wspólnych parametrów (na przykład czas rozpoczęcia i czas trwania). Aby wykonać kilka przekształceń jednocześnie, przypisz im ten sam czas rozpoczęcia. Aby były one sekwencyjne, oblicz czas rozpoczęcia plus czas trwania poprzedzającego przekształcenia.

Plik XML animacji należy do katalogu res/anim/ projektu na Androida. Plik musi mieć 1 element główny: pojedynczy element <alpha>, <scale>, <translate>, <rotate>, interpolator lub element <set>, który przechowuje grupy tych elementów (może on zawierać kolejny element <set>). Domyślnie wszystkie instrukcje animacji są stosowane jednocześnie. Aby następować po kolei, podaj atrybut startOffset, jak pokazano w poniższym przykładzie.

Poniższy kod XML z jednego z interfejsów API jest używany do rozciągania, a następnie jednocześnie obracania i obracania obiektu widoku danych.

<set android:shareInterpolator="false">
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="1.4"
        android:fromYScale="1.0"
        android:toYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="700" />
    <set android:interpolator="@android:anim/decelerate_interpolator">
        <scale
           android:fromXScale="1.4"
           android:toXScale="0.0"
           android:fromYScale="0.6"
           android:toYScale="0.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="700"
           android:duration="400"
           android:fillBefore="false" />
        <rotate
           android:fromDegrees="0"
           android:toDegrees="-45"
           android:toYScale="0.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="700"
           android:duration="400" />
    </set>
</set>

Współrzędne ekranu (nieużywane w tym przykładzie) to (0,0) w lewym górnym rogu i zwiększają się w miarę przesuwania się w dół i w prawo.

Niektóre wartości, np. przestawna X, można określić względem samego obiektu lub względem obiektu nadrzędnego. Pamiętaj, aby użyć właściwego formatu („50” – 50% w odniesieniu do jednostki nadrzędnej lub „50%” w odniesieniu do niej samej).

Aby określić, jak przekształcanie ma być stosowane w czasie, przypisz do niego Interpolator. Android zawiera kilka podklas interpolatora, które określają różne krzywe prędkości, np. AccelerateInterpolator informuje o przekształceniu, które rozpoczyna się wolniej i przyspiesza. Każdy z nich ma wartość atrybutu, którą można zastosować w pliku XML.

Gdy ten plik XML zostanie zapisany jako hyperspace_jump.xml w katalogu res/anim/ projektu, poniższy kod będzie się odwoływać do niego i stosować go do obiektu ImageView z układu.

Kotlin

AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump).also { hyperspaceJumpAnimation ->
    findViewById<ImageView>(R.id.spaceshipImage).startAnimation(hyperspaceJumpAnimation)
}

Java

ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);
Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);

Zamiast startAnimation() możesz określić czas rozpoczęcia animacji za pomocą funkcji Animation.setStartTime(), a potem przypisać animację do widoku za pomocą polecenia View.setAnimation().

Więcej informacji na temat składni XML, dostępnych tagów i atrybutów znajdziesz w artykule Zasoby animacji.

Uwaga: niezależnie od tego, jak możesz przesunąć animację lub zmienić jej rozmiar, progi widoku, w którym jest przechowywana animacja, nie dostosują się automatycznie do niej. Mimo to animacja będzie kontynuowana poza granicami jej widoku i nie zostanie przycięta. Przycinanie zostanie jednak zrealizowane, jeśli animacja przekroczy granice widoku nadrzędnego.