Назад к вопросам
Junior
69
questionbank

Какие типы анимаций вы знаете?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

В Android SDK существует несколько основных типов анимаций:

  • View Animations (Tween Animations): Простые анимации, применяемые к свойствам View (позиция, размер, вращение, альфа). Работают за счет изменения параметров отрисовки View, но не меняют его реальные границы.

    Примеры: RotateAnimation, AlphaAnimation, TranslateAnimation, ScaleAnimation.

    Описываются в XML-файлах в директории res/anim или программно.

    <!-- res/anim/fade_in.xml -->
    <alpha
        android:fromAlpha="0.0"
        android:toAlpha="1.0"
        android:duration="500" />
    
    // В Kotlin коде
    val fadeIn = AlphaAnimation(0f, 1f)
    fadeIn.duration = 500
    myView.startAnimation(fadeIn)
    
  • Property Animations: Более мощный и гибкий тип анимаций. Анимируют реальные свойства объектов (не только View), меняя их значения напрямую. Работают с любыми объектами и свойствами, имеющими сеттеры.

    Примеры: ObjectAnimator, ValueAnimator, AnimatorSet.

    Могут описываться в XML-файлах в директории res/animator или программно.

    <!-- res/animator/fade_in_property.xml -->
    <objectAnimator
        android:propertyName="alpha"
        android:duration="500"
        android:valueFrom="0.0"
        android:valueTo="1.0"
        android:valueType="floatType" />
    
    // В Kotlin коде
    val fadeIn = ObjectAnimator.ofFloat(myView, "alpha", 0f, 1f)
    fadeIn.duration = 500
    fadeIn.start()
    
  • Drawable Animations: Анимации, представляющие собой последовательность Drawable-ресурсов. Используются для создания покадровой анимации.

    Описываются в XML-файлах в директории res/drawable или res/anim.

    <!-- res/drawable/spinning_wheel.xml -->
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot="false">
        <item android:drawable="@drawable/wheel_frame_1" android:duration="50" />
        <item android:drawable="@drawable/wheel_frame_2" android:duration="50" />
        <item android:drawable="@drawable/wheel_frame_3" android:duration="50" />
    </animation-list>
    
    // В Kotlin коде
    val spinningWheel = myImageView.drawable as AnimationDrawable
    spinningWheel.start()
    
  • Transition API: Анимации, применяемые к изменениям в иерархии Views, например, при появлении/исчезновении View или изменении их положения и размера. Используется для анимирования переходов между различными состояниями UI.

    Работает с концепциями Scenes (состояние контейнера View) и Transitions (определение анимации между состояниями).

    Примеры: Fade, Slide, ChangeBounds.

    // В Kotlin коде
    TransitionManager.beginDelayedTransition(rootLayout)
    // Изменение параметров View внутри rootLayout (например, visibility)
    myView.visibility = View.VISIBLE
    
  • MotionLayout: Наследник ConstraintLayout, предназначенный для создания сложных анимаций на основе констрейнтов. Позволяет определять начальное и конечное состояние UI с помощью ConstraintSet и анимировать переход между ними.

    Описывается в XML-файлах лейаута, часто с отдельным XML-файлом сцены движения (MotionScene).

    <!-- В XML разметке MotionLayout -->
    <MotionScene <!-- ... --> >
        <Transition
            motion:constraintSetStart="@+id/start"
            motion:constraintSetEnd="@+id/end"
            motion:duration="1000">
            <!-- ... Interpolators, KeyFrames etc. -->
        </Transition>
    
        <ConstraintSet android:id="@+id/start">
            <!-- Констрейнты для начального состояния -->
        </ConstraintSet>
    
        <ConstraintSet android:id="@+id/end">
            <!-- Констрейнты для конечного состояния -->
        </ConstraintSet>
    </MotionScene>