System animacji widoku danych umożliwia tworzenie w Widoku animacji animacji rozszerzonych. Animacja starszych dzieci oblicza animację na podstawie takich informacji jak punkt początkowy, punkt końcowy, rozmiar, obrót inne typowe cechy animacji.
Animacja starszych dzieci może wykonać serię prostych przekształceń (położenie, rozmiar, obrót,
i przezroczystość) na zawartości obiektu View. Jeśli masz obiekt TextView
, możesz przesuwać, obracać, powiększać lub zmniejszać tekst. Jeśli zawiera
obraz tła zostanie przekształcony wraz z tekstem. animation package
podaje wszystkie klasy używane w animacji starszych dzieci.
Sekwencja instrukcji animacji definiuje animację klasy średniej, zdefiniowaną w kodzie XML lub
Kod na Androida. Podobnie jak przy definiowaniu układu, zalecany jest plik XML, ponieważ jest bardziej czytelny,
wielokrotnego użytku i wymiennymi niż w przypadku kodowania na stałe. W przykładzie poniżej używamy formatu XML. (Do
. Więcej informacji o definiowaniu animacji w kodzie aplikacji (zamiast języka XML) znajdziesz w
AnimationSet
i inne podklasy Animation
).
Instrukcje dotyczące animacji określają, jakie przekształcenia mają zostać wprowadzone oraz jak długo to potrwa. Przekształcenia mogą być sekwencyjne lub jednoczesne – można na przykład przenieść zawartość obiektu TextView z lewej do prawej, a następnie ją obrócić. o 180 stopni lub możesz ustawić jednoczesny przesuwanie i obracanie tekstu. Każde przekształcenie wymaga zestaw parametrów właściwych dla danego przekształcenia (rozmiar początkowy i końcowy dla rozmiaru) zmiany, kąta początkowego i końcowego dla obrotu itd.), a także zestaw wspólnych (na przykład czas rozpoczęcia i czas trwania). Aby dokonać kilku przekształceń jednocześnie ustaw ten sam czas rozpoczęcia; aby były sekwencyjne, oblicz czas rozpoczęcia plus czas trwania poprzedniego przekształcenia.
Plik XML animacji należy do katalogu res/anim/
na urządzeniu z Androidem
w projektach AI. Plik musi mieć jeden element główny: będzie to pojedynczy element
<alpha>
, <scale>
, <translate>
<rotate>
, element interpolatora lub <set>
element, który zawiera
grupy tych elementów (które mogą zawierać kolejny element <set>
). Domyślnie wszystkie
są stosowane jednocześnie. Aby działały po kolei, musisz:
określ 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 jednoczesnego obracania i i obrócić obiekt widoku.
<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) znajdują się w lewym górnym rogu (0,0). rośnie w dół i w prawo.
Niektóre wartości, takie jak przesuwX, można określić w odniesieniu do samego obiektu lub względem elementu nadrzędnego. Pamiętaj, aby użyć formatu odpowiedniego do swoich potrzeb („50” oznacza 50% wartości nadrzędnej, lub „50%” dla 50% w stosunku do siebie).
Aby określić sposób przekształcenia z upływem czasu, przypisz wartość Interpolator
. Android zawiera kilka podklasy Interpolator,
może określać różne krzywe prędkości, na przykład AccelerateInterpolator
informuje, że przekształcenie zaczyna się wolno i szybciej. Każdy z nich ma wartość atrybutu, która może być
stosowane w pliku XML.
Z tym plikiem XML zapisanym jako hyperspace_jump.xml
w res/anim/
w projekcie, poniższy kod będzie się do niego odwoływać i stosować do obiektu ImageView
z poziomu 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ć godzinę rozpoczęcia wyświetlania
za pomocą parametru
, a potem przypisz ją do widoku danych z parametrem Animation.setStartTime()
.View.setAnimation()
Więcej informacji o składni XML, dostępnych tagach i atrybutach znajdziesz w zasobach animacji.
Uwaga: bez względu na to, jak animacja może się przesunąć lub zmienić jej rozmiar, granice widoku, w którym znajduje się animacja, nie dostosują się automatycznie, aby ją zmieścić. Mimo to animacja będzie nadal narysowana poza granicami widoku i nie zostanie przycięta. Przycinanie pojawi się, jeśli animacja przekroczy granice widoku nadrzędnego.