Zasoby animacji

Zasób animacji może definiować jeden z 2 typów animacji:

Animacja właściwości
Tworzy animację, modyfikując wartości właściwości obiektu w określonym czasie. dzięki Animator.
Wyświetl animację

Za pomocą struktury animacji widoku możesz tworzyć 2 rodzaje animacji:

Animacja właściwości

Animacja zdefiniowana w pliku XML, która modyfikuje właściwości obiektu docelowego, takie jak koloru tła lub wartości alfa w określonym czasie.

lokalizacja pliku:

res/animator/filename.xml(
) Nazwa pliku jest używana jako identyfikator zasobu.
skompilowany typ danych zasobu:
wskaźnik zasobu ValueAnimator, ObjectAnimator, lub AnimatorSet
odniesienie do zasobu:
W kodzie w języku Java lub Kotlin: R.animator.filename
W pliku XML: @[package:]animator/filename
składnia:
<set
  android:ordering=["together" | "sequentially"]>

    <objectAnimator
        android:propertyName="string"
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["restart" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <animator
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["restart" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <set>
        ...
    </set>
</set>

Plik musi mieć jeden element główny: <set>, <objectAnimator> lub <valueAnimator>. Dostępne opcje grupować elementy animacji razem w elemencie <set>, w tym <set> elementów.

elementy:
<set>
Kontener zawierający inne elementy animacji (<objectAnimator>, <valueAnimator> lub inne elementy <set>). Reprezentuje AnimatorSet.

Możesz dodatkowo określić zagnieżdżone tagi <set> animacji grupowych. Każdy element <set> może zdefiniować własne ordering.

Atrybuty:

android:ordering
Słowo kluczowe. Określa kolejność odtwarzania animacji z tego zestawu.
WartośćOpis
sequentiallyOdtwarzaj kolejno animacje z tego zestawu.
together (domyślnie)Odtwarzaj animacje z tego zestawu jednocześnie.
<objectAnimator>
Animowanie określonej właściwości obiektu w określonym czasie. Reprezentuje ObjectAnimator.

Atrybuty:

android:propertyName
Ciąg znaków. Wymagany. Właściwość obiektu do animacji, do której odwołuje się jego nazwa. Możesz na przykład wpisać "alpha" lub "backgroundColor" w przypadku obiektu View. Element objectAnimator nie ujawnia: target dlatego nie możesz ustawić animacji obiektu w deklaracji XML. Musisz powiększ zasób XML animacji, wywołując metodę loadAnimator() i wywołanie setTarget(), aby ustawić do obiektu docelowego zawierającego tę właściwość.
android:valueTo
float, int lub color. Wymagany. Wartość, na której kończy się właściwość animowana. Przedstawiane są kolory jako 6-cyfrowe liczby szesnastkowe, np. #333333.
android:valueFrom
float, int lub color. Wartość, od której zaczyna się właściwość animowana. Jeśli nie, animacja zaczyna się od wartości uzyskanej przez metodę get usługi. Przedstawiane są kolory jako 6-cyfrowe liczby szesnastkowe, np. #333333.
android:duration
int. Czas trwania animacji w milisekundach. Wartość domyślna to 300 milisekund.
android:startOffset
int. Czas opóźnienia animacji (w milisekundach) Funkcja start() jest wywoływana.
android:repeatCount
int. Liczba powtórzeń animacji. Ustaw „"-1"” na „Bez ograniczeń” lub do dodatniej liczby całkowitej. Na przykład wartość "1" oznacza, że animacja jest powtarzana raz po pierwszym uruchomieniu, więc animacja jest odtwarzana razem co dwa razy. Wartość domyślna to "0", co oznacza brak powtórzeń.
android:repeatMode
int. Sposób działania animacji po dotarciu do jej końca. android:repeatCount musi być ustawiona na dodatnią liczbę całkowitą lub "-1", aby ten atrybut miał zastosowanie. Ustaw jako "reverse" aby zmienić kierunek animacji przy każdej iteracji, lub "restart", by animacja była za każdym razem od początku.
android:valueType
Słowo kluczowe. Nie określaj tego atrybutu, jeśli jego wartością jest kolor. Platforma animacji automatycznie obsługuje kolory .
WartośćOpis
intTypeOkreśla, że animowane wartości są liczbami całkowitymi.
floatType (domyślnie)Określa, że animowane wartości są zmiennoprzecinkowe.
<animator>
Wykonuje animację przez określony czas. Reprezentuje element ValueAnimator.

Atrybuty:

android:valueTo
float, int lub color. Wymagany. Wartość, przy której kończy się animacja. Przedstawiane są kolory jako 6-cyfrowe liczby szesnastkowe, np. #333333.
android:valueFrom
float, int lub color. Wymagany. Wartość, przy której rozpoczyna się animacja. Przedstawiane są kolory jako 6-cyfrowe liczby szesnastkowe, np. #333333.
android:duration
int. Czas trwania animacji w milisekundach. Wartość domyślna to 300 ms.
android:startOffset
int. Czas opóźnienia animacji (w milisekundach) Funkcja start() jest wywoływana.
android:repeatCount
int. Liczba powtórzeń animacji. Ustaw „"-1"” na „Bez ograniczeń” lub do dodatniej liczby całkowitej. Na przykład wartość "1" oznacza, że animacja jest powtarzana raz po pierwszym uruchomieniu, więc animacja jest odtwarzana razem co dwa razy. Wartość domyślna to "0", co oznacza brak powtórzeń.
android:repeatMode
int. Sposób działania animacji po dotarciu do jej końca. android:repeatCount musi być ustawiona na dodatnią liczbę całkowitą lub "-1", aby ten atrybut miał zastosowanie. Ustaw jako "reverse" aby zmienić kierunek animacji przy każdej iteracji, lub "restart", by animacja była za każdym razem od początku.
android:valueType
Słowo kluczowe. Nie określaj tego atrybutu, jeśli jego wartością jest kolor. Platforma animacji automatycznie obsługuje kolory .
WartośćOpis
intTypeOkreśla, że animowane wartości są liczbami całkowitymi.
floatType (domyślnie)Określa, że animowane wartości są zmiennoprzecinkowe.
przykład:

Plik XML zapisany w lokalizacji res/animator/property_animator.xml:

<set android:ordering="sequentially">
    <set>
        <objectAnimator
            android:propertyName="x"
            android:duration="500"
            android:valueTo="400"
            android:valueType="intType"/>
        <objectAnimator
            android:propertyName="y"
            android:duration="500"
            android:valueTo="300"
            android:valueType="intType"/>
    </set>
    <objectAnimator
        android:propertyName="alpha"
        android:duration="500"
        android:valueTo="1f"/>
</set>

Aby uruchomić tę animację, rozszerz zasoby XML w swoim kodzie do obiektu AnimatorSet, a następnie ustaw obiekty docelowe dla wszystkich animacji przed uruchomieniem zestawu animacji. Wywołanie setTarget() ustawia dla wszystkich użytkowników jeden obiekt docelowy dla wszystkich elementów podrzędnych obiektu AnimatorSet. Jak to zrobić:

Kotlin

val set: AnimatorSet = AnimatorInflater.loadAnimator(myContext, R.animator.property_animator)
    .apply {
        setTarget(myObject)
        start()
    }

Java

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
    R.animator.property_animator);
set.setTarget(myObject);
set.start();
zobacz też:

Wyświetl animację

Platforma animacji widoku danych obsługuje zarówno animacje pośrednie, jak i klatki poklatkowe, które są zadeklarowane w pliku XML. W sekcjach poniżej opisujemy, jak używać obu metod.

Animacja starszych dzieci

Animacja zdefiniowana w pliku XML, która wykonuje przejścia na obrazie, takie jak obracanie, blaknięcie, poruszanie się i rozciąganie.

lokalizacja pliku:

res/anim/filename.xml(
) Nazwa pliku jest używana jako identyfikator zasobu.
skompilowany typ danych zasobu:
Wskaźnik zasobu Animation
odniesienie do zasobu:
W języku Java: R.anim.filename
W pliku XML: @[package:]anim/filename
składnia:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" | "false"] >
    <alpha
        android:fromAlpha="float"
        android:toAlpha="float" />
    <scale
        android:fromXScale="float"
        android:toXScale="float"
        android:fromYScale="float"
        android:toYScale="float"
        android:pivotX="float"
        android:pivotY="float" />
    <translate
        android:fromXDelta="float"
        android:toXDelta="float"
        android:fromYDelta="float"
        android:toYDelta="float" />
    <rotate
        android:fromDegrees="float"
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float" />
    <set>
        ...
    </set>
</set>

Plik musi mieć jeden element główny: <alpha>, <scale>, <translate> <rotate> lub <set> element, który zawiera grupa (lub grupy) innych elementów animacji (w tym zagnieżdżonych elementów <set>).

elementy:
<set>
Kontener z innymi elementami animacji (<alpha>, <scale>, <translate>, <rotate>) lub inne elementy <set>. Reprezentuje element AnimationSet.

Atrybuty:

android:interpolator
Zasób interpolatora. Wartość Interpolator, która zostanie zastosowana do animacji. Wartość musi być odwołaniem do zasobu, który określa interpolator, nie jest nazwą klasy interpolatora. Występuje domyślny interpolator zasobów dostępnych na platformie, ale możesz też utworzyć własny zasób interpolatora. Więcej informacji na temat interpolatorów znajdziesz w dyskusji poniżej.
android:shareInterpolator
Wartość logiczna. "true", jeśli chcesz używać tego samego interpolatora wśród wszystkich elementów podrzędnych .
<alpha>
Animacja rozjaśniania lub zanikania. Reprezentuje element AlphaAnimation.

Atrybuty:

android:fromAlpha
Swobodna. Początkowa przesunięcie przezroczystości, gdzie 0,0 jest przezroczyste, a 1,0 jest nieprzezroczysty.
android:toAlpha
Swobodna. Końcowe przesunięcie przezroczystości, gdzie 0,0 jest przezroczyste, a 1,0 jest nieprzezroczysty.

Więcej atrybutów obsługiwanych przez <alpha> znajdziesz w dokumentacji klas Animation, której atrybuty XML są dziedziczone przez ten element.

<scale>
Animacja zmiany rozmiaru. Możesz określić punkt środkowy obrazu, z którego rośnie. na zewnątrz lub do wewnątrz, określając pivotX i pivotY. Jeśli na przykład te wartości wynoszą 0,0 (w lewym górnym rogu), wszystkie wzrosty w dół i w prawo. Reprezentuje element ScaleAnimation.

Atrybuty:

android:fromXScale
Swobodna. Początkowe przesunięcie rozmiaru od X, gdzie 1,0 pozostaje bez zmian.
android:toXScale
Swobodna. Końcowe przesunięcie rozmiaru osi X, gdzie 1,0 pozostaje bez zmian.
android:fromYScale
Swobodna. Początkowe przesunięcie rozmiaru Y, gdzie 1,0 pozostaje bez zmian.
android:toYScale
Swobodna. Końcowe przesunięcie rozmiaru Y, gdzie 1,0 nie powoduje zmiany.
android:pivotX
Swobodna. Współrzędna X, która pozostaje nieruchoma po skalowaniu obiektu.
android:pivotY
Swobodna. Współrzędna Y, która pozostaje stała po skalowaniu obiektu.

Więcej atrybutów obsługiwanych przez <scale> znajdziesz w dokumentacji klas Animation, której atrybuty XML są dziedziczone przez ten element.

<translate>
Ruch w pionie lub poziomie. Reprezentuje TranslateAnimation Obsługuje te atrybuty w dowolnym z tych 3 formatów:
  • Wartości od -100 do 100 z końcówką „%”, wskazującą wartość procentową względem siebie.
  • Wartości od -100 do 100 kończące się na „%p”, wskazujące wartość procentową w stosunku do elementu nadrzędnego.
  • Wartość zmiennoprzecinkowa bez sufiksu, która wskazuje wartość bezwzględną.

Atrybuty:

android:fromXDelta
Liczba zmiennoprzecinkowa lub procentowa. Początkowe przesunięcie osi X. Wyrażona w pikselach (względnie) do normalnego położenia, np. "5"; w procentach względem szerokości elementu, np. "5%" lub procentowo względem szerokości elementu nadrzędnego, np. "5%p".
android:toXDelta
Liczba zmiennoprzecinkowa lub procentowa. Koniec przesunięcia X. Wyrażona w pikselach (względnie) do normalnego położenia, np. "5"; w procentach względem szerokości elementu, np. "5%" lub procentowo względem szerokości elementu nadrzędnego, np. "5%p".
android:fromYDelta
Liczba zmiennoprzecinkowa lub procentowa. Początkowe odsunięcie osi Y. Wyrażona w pikselach (względnie) do normalnego położenia, np. "5"; w procentach względem wysokości elementu, np. "5%" lub procentowo względem wysokości elementu nadrzędnego, np. "5%p".
android:toYDelta
Liczba zmiennoprzecinkowa lub procentowa. Końcowe przesunięcie osi Y. Wyrażona w pikselach (względnie) do normalnego położenia, np. "5"; w procentach względem wysokości elementu, np. "5%" lub procentowo względem wysokości elementu nadrzędnego, np. "5%p".

Więcej atrybutów obsługiwanych przez <translate> znajdziesz w dokumentacji klas Animation, której atrybuty XML są dziedziczone przez ten element.

<rotate>
Animacja obrotu. Reprezentuje element RotateAnimation.

Atrybuty:

android:fromDegrees
Swobodna. Położenie kątowe (w stopniach)
android:toDegrees
Swobodna. Końcowe położenie kątowe w stopniach.
android:pivotX
Liczba zmiennoprzecinkowa lub procentowa. Współrzędna X środka obrotu. Wyrażono w pikselach względem lewej krawędzi obiektu, np. "5"; w procentach do lewej krawędzi obiektu, np. "5%"; lub procentowo w stosunku do elementu nadrzędnego lewą krawędź kontenera, np. "5%p".
android:pivotY
Liczba zmiennoprzecinkowa lub procentowa. Współrzędna Y środka obrotu. Wyrażono w pikselach względem górnej krawędzi obiektu, np. "5"; w procentach do górnej krawędzi obiektu, np. "5%"; lub procentowo w stosunku do elementu nadrzędnego górnej krawędzi kontenera, np. "5%p".

Więcej atrybutów obsługiwanych przez <rotate> znajdziesz w dokumentacji klas Animation, której atrybuty XML są dziedziczone przez ten element.

przykład:

Plik XML zapisany w lokalizacji res/anim/hyperspace_jump.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android"
    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/accelerate_interpolator"
        android:startOffset="700">
        <scale
            android:fromXScale="1.4"
            android:toXScale="0.0"
            android:fromYScale="0.6"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400" />
        <rotate
            android:fromDegrees="0"
            android:toDegrees="-45"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400" />
    </set>
</set>

Ten kod aplikacji stosuje animację do elementów ImageView i rozpoczyna animację:

Kotlin

val image: ImageView = findViewById(R.id.image)
val hyperspaceJump: Animation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump)
image.startAnimation(hyperspaceJump)

Java

ImageView image = (ImageView) findViewById(R.id.image);
Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);
zobacz też:

Interpolatory

Interpolator to zdefiniowany w kodzie XML modyfikator animacji, który wpływa na szybkość zmian w funkcji animację. Umożliwia to przyspieszenie, spowolnienie, powtórzenie istniejących efektów animacji, odesłana itd.

Interpolator jest stosowany do elementu animacji za pomocą funkcji android:interpolator , którego wartość jest odwołaniem do zasobu interpolatora.

Wszystkie interpolatory dostępne na Androidzie są podklasami klasy Interpolator. Dla każdej klasy interpolatora Android zawiera publiczny zasób, do którego możesz się odwołać, aby zastosować interpolator do animacji za pomocą atrybutu android:interpolator. Tabela poniżej zawiera zasoby, które mają być używane dla poszczególnych interpolatorów:

Klasa interpolatoraIdentyfikator zasobu
AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator
AccelerateInterpolator @android:anim/accelerate_interpolator
AnticipateInterpolator @android:anim/anticipate_interpolator
AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator
BounceInterpolator @android:anim/bounce_interpolator
CycleInterpolator @android:anim/cycle_interpolator
DecelerateInterpolator @android:anim/decelerate_interpolator
LinearInterpolator @android:anim/linear_interpolator
OvershootInterpolator @android:anim/overshoot_interpolator

Aby zastosować jeden z nich za pomocą atrybutu android:interpolator:

<set android:interpolator="@android:anim/accelerate_interpolator">
    ...
</set>

Niestandardowe interpolatory

Jeśli platforma interpolatora nie spełnia Twoich oczekiwań, możesz utworzyć niestandardowy zasób interpolatora ze zmodyfikowanymi atrybutami. Możesz na przykład dostosować stawkę przyspieszenie dla AnticipateInterpolator lub dostosuj liczbę dla cyklu CycleInterpolator. W tym celu utworzyć własny zasób interpolatora w pliku XML.

lokalizacja pliku:

res/anim/filename.xml(
) Nazwa pliku jest używana jako identyfikator zasobu.
skompilowany typ danych zasobu:
Wskaźnik zasobu do odpowiedniego obiektu interpolatora
odniesienie do zasobu:
W pliku XML: @[package:]anim/filename
składnia:
<?xml version="1.0" encoding="utf-8"?>
<InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
    android:attribute_name="value"
    />

Jeśli nie zastosujesz żadnych atrybutów, interpolator będzie działać tak samo jak tych dostępnych na platformie, które zostały wymienione w poprzedniej tabeli.

elementy:
Zauważ, że każda implementacja Interpolator, zdefiniowane w pliku XML, ma nazwę rozpoczynającą się od małej litery.

<accelerateDecelerateInterpolator>
Tempo zmian zaczyna się i kończy powoli, ale przyspiesza w okresie pośrodku.

Brak atrybutów.

<accelerateInterpolator>
Tempo zmian zaczyna się powoli, a potem przyspiesza.

Atrybuty:

android:factor
Swobodna. Szybkość przyspieszenia. Wartość domyślna to 1.
<anticipateInterpolator>
Zmiana zaczyna się od tyłu, a potem przesuwa się do przodu.

Atrybuty:

android:tension
Swobodna. Stopień napięcia. Wartość domyślna to 2.
<anticipateOvershootInterpolator>
Zmiana rozpoczyna się wstecz, następnie przesuwa do przodu i przekracza wartość docelową, a następnie osiąga wartość końcową.

Atrybuty:

android:tension
Swobodna. Stopień napięcia. Wartość domyślna to 2.
android:extraTension
Swobodna. Wartość, przez którą należy pomnożyć napięcie. Wartość domyślna to 1.5.
<bounceInterpolator>
Zmiana zostaje odrzucona pod koniec.

Brak atrybutów

<cycleInterpolator>
Powtarza animację przez określoną liczbę cykli. Tempo zmian wynika z schemat zatokowy.

Atrybuty:

android:cycles
Liczba całkowita. Liczba cykli. Wartość domyślna to 1.
<decelerateInterpolator>
Tempo zmian zaczyna się szybko, a potem spada.

Atrybuty:

android:factor
Swobodna. Tempo zwalniania. Wartość domyślna to 1.
<linearInterpolator>
Szybkość zmian jest stała.

Brak atrybutów.

<overshootInterpolator>
Zmiana przesuwa się do przodu i przekracza ostatnią wartość, a potem wraca.

Atrybuty:

android:tension
Swobodna. Stopień napięcia. Wartość domyślna to 2.
przykład:

Plik XML zapisany w lokalizacji res/anim/my_overshoot_interpolator.xml:

<?xml version="1.0" encoding="utf-8"?>
<overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    android:tension="7.0"
    />

Ten kod XML animacji stosuje interpolator:

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@anim/my_overshoot_interpolator"
    android:fromXScale="1.0"
    android:toXScale="3.0"
    android:fromYScale="1.0"
    android:toYScale="3.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="700" />

Animacja klatki

Animacja zdefiniowana w pliku XML, która pokazuje sekwencję obrazów w ustalonej kolejności, jak w filmie.

lokalizacja pliku:

res/drawable/filename.xml(
) Nazwa pliku jest używana jako identyfikator zasobu.
skompilowany typ danych zasobu:
Wskaźnik zasobu AnimationDrawable
odniesienie do zasobu:
W języku Java: R.drawable.filename
W pliku XML: @[package:]drawable.filename
składnia:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource_name"
        android:duration="integer" />
</animation-list>
elementy:
<animation-list>
Wymagane. Musi to być element główny. Zawiera co najmniej jeden element <item> elementów.

Atrybuty:

android:oneshot
Wartość logiczna. "true", jeśli chcesz wykonać animację raz; "false", aby zapętlić animację.
<item>
Pojedyncza klatka animacji. Musi być elementem podrzędnym elementu <animation-list>.

Atrybuty:

android:drawable
Zasób rysowalny. Element rysowalny, który ma być używany w tej ramce.
android:duration
Liczba całkowita. Czas wyświetlania tej klatki (w milisekundach).
przykład:

Plik XML zapisany w lokalizacji res/drawable/rocket_thrust.xml:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>

Ten kod aplikacji ustawia animację jako tło dla View: i odtwórz animację:

Kotlin

val rocketImage: ImageView = findViewById(R.id.rocket_image)
rocketImage.setBackgroundResource(R.drawable.rocket_thrust)

val rocketAnimation = rocketImage.background
if (rocketAnimation is Animatable) {
    rocketAnimation.start()
}

Java

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);

rocketAnimation = rocketImage.getBackground();
if (rocketAnimation instanceof Animatable) {
    ((Animatable)rocketAnimation).start();
}
zobacz też: