View Animation — что это, Tween Animation в Android

Автор: IT Sectr Опубликовано: 2026-03-01 Время чтения: 8 мин

View Animation — устаревшая система анимации Android API 1+, работающая с View-объектами через Tween Animation (Alpha, Translate, Scale, Rotate). Google рекомендует Property Animation (Animator) для всех новых проектов. Статья объясняет принципы, типы, XML-разметку и причины отказа.

Главное

  • View Animation — анимация View через Tween Animation: Alpha, Translate, Scale, Rotate
  • XML-определение — анимации описываются в res/anim/ с помощью , , ,
  • AnimationSet — комбинация нескольких анимаций в одном наборе с общими параметрами
  • Ограничение — View Animation меняет не свойства, а только отрисовку: View остаётся на исходной позиции
  • Property Animation — современная замена (Animator), работающая с реальными свойствами объектов

Что такое View Animation?

View Animation — подсистема анимации Android, работающая на уровне View (API 1+). Она использует четыре типа Tween Animation: AlphaAnimation (прозрачность), TranslateAnimation (перемещение), ScaleAnimation (масштаб) и RotateAnimation (вращение). Каждая анимация описывается в XML-файле в папке res/anim/ или создаётся программно в коде Kotlin.

Механизм View Animation не изменяет реальные свойства View — он перерисовывает View в новом положении, масштабе или прозрачности, но обратный вызов onTouchEvent() принимает координаты исходного расположения. Это ключевое ограничение, известное как клик-несоответствие (click mismatch).

По данным Android Developer Documentation (2026), Google помечает View Animation как устаревший API, начиная с Android 3.0 (API 11). Для новых проектов рекомендуется Property Animation — Animator, AnimatorSet и ObjectAnimator, которые работают с реальными свойствами объектов через setter-методы.

Типы Tween Animation

Tween Animation — анимация «между» ключевыми кадрами: вы задаёте начальное и конечное состояние, а система рассчитывает промежуточные кадры. Android предоставляет четыре стандартных типа, каждый со своим набором параметров.

AlphaAnimation

AlphaAnimation изменяет прозрачность View от fromAlpha до toAlpha. Значения от 0.0 (полностью прозрачно) до 1.0 (полностью видимо). По умолчанию анимация длится 300 мс. Параметр fillAfter=true оставляет View в конечном состоянии прозрачности.

xml
<!-- res/anim/fade_out.xml -->
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="1.0"
    android:toAlpha="0.0"
    android:duration="500"
    android:fillAfter="true" />

TranslateAnimation

TranslateAnimation перемещает View из начальной позиции (fromXDelta, fromYDelta) в конечную (toXDelta, toYDelta). Значения задаются в пикселях, процентах от родителя или процентах от самого View. Например, 100% означает 100% ширины View.

ScaleAnimation

ScaleAnimation масштабирует View относительно точки pivotX/pivotY. fromXScale=1.0, toXScale=2.0 увеличивает ширину вдвое. Параметр pivotType определяет, относительно чего считается pivot: self, parent или absolute. Анимация масштаба не меняет реальные размеры View — только отрисовку.

RotateAnimation

RotateAnimation вращает View вокруг точки pivot на угол от fromDegrees до toDegrees. Угол измеряется в градусах: 0 — исходное положение, 360 — полный оборот. Для бесконечного вращения используйте repeatCount=INFINITE.

View Animation vs Property Animation

Разница между View Animation и Property Animation (Animator) — фундаментальное различие в архитектуре анимации Android. View Animation оперирует только отрисовкой, Property Animation изменяет фактические свойства объекта через setter-методы, что приводит к обновлению макета.

КритерийView AnimationProperty Animation
API уровеньAPI 1+ (устаревший)API 11+ (рекомендованный)
Что анимируетОтрисовку View (canvas)Свойства объекта (setter)
Клик после анимацииНа исходной позицииНа новой позиции
Типы анимаций4 Tween + AnimationSetObjectAnimator, ValueAnimator, AnimatorSet
LayoutParamsНе меняетМеняет через setLayoutParams
ПроизводительностьВысокая (только canvas)Средняя (зависит от setter)

XML-конфигурация анимаций

View Animation обычно задаётся в XML-файлах res/anim/ с корневым элементом (AnimationSet) или одним из четырёх типов. AnimationSet позволяет комбинировать анимации с общими параметрами startOffset, duration, interpolator.

xml
<!-- res/anim/bounce.xml -->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/bounce_interpolator">

    <translate
        android:fromYDelta="0%"
        android:toYDelta="-100%"
        android:duration="600" />

    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.3"
        android:duration="600" />
</set>

XML-файл загружается через AnimationUtils.loadAnimation(). Interpolator определяет закон изменения параметра во времени: accelerate, decelerate, bounce, overshoot. Кастомный Interpolator создаётся через XML-ресурс @anim/interpolator_name.

Общие атрибуты

Все Tween-анимации поддерживают атрибуты: duration (мс), startOffset (задержка перед началом), repeatCount, repeatMode (restart/reverse), fillEnabled, fillBefore, fillAfter, interpolator. Атрибут fillAfter определяет, остаётся ли View в конечном состоянии анимации после завершения.

Примеры кода на Kotlin

Хотя анимации обычно определяются в XML, их можно создавать и программно через Kotlin. Программный подход полезен для динамических параметров: значение прозрачности зависит от состояния приложения, а не задано статически.

kotlin
// Программное создание AlphaAnimation в Kotlin
import android.view.animation.AlphaAnimation
import android.view.animation.Animation
import android.view.View

fun View.fadeOut(duration: Long = 500L, onEnd: () -> Unit = {}) {
    val animation = AlphaAnimation(1.0f, 0.0f).apply {
        this.duration = duration
        fillAfter = true
        setAnimationListener(object : Animation.AnimationListener {
            override fun onAnimationEnd(animation: Animation?) { onEnd() }
            override fun onAnimationStart(animation: Animation?) {}
            override fun onAnimationRepeat(animation: Animation?) {}
        })
    }
    startAnimation(animation)
}

// Загрузка анимации из XML
val bounceAnim = AnimationUtils.loadAnimation(context, R.anim.bounce)
view.startAnimation(bounceAnim)

// AnimationSet — комбинация анимаций
val set = AnimationSet(true).apply {
    addAnimation(TranslateAnimation(0f, 200f, 0f, 0f).apply { duration = 400 })
    addAnimation(RotateAnimation(0f, 360f).apply {
        duration = 400
        pivotX = view.width / 2f
        pivotY = view.height / 2f
    })
}
view.startAnimation(set)

Метод startAnimation() добавляет анимацию в очередь отрисовки View. Для отмены используется clearAnimation(). Важно: fillAfter=true не меняет LayoutParams — при повторном вызове startAnimation анимация начинается с исходного состояния View, а не с последнего отрисованного.

Когда использовать View Animation?

View Animation имеет узкую область применения в 2026 году: поддержка Android 4.x (API 16-19), где Property Animation может работать нестабильно; простые эффекты появления/исчезновения, не требующие смены LayoutParams; анимации, где клик-несоответствие не критично (например, фоновые элементы). Для всех остальных случаев Google рекомендует переходить на ObjectAnimator или AnimatorSet.

По данным Android Developers, Property Animation на 15-20% эффективнее по использованию памяти, так как не создаёт промежуточные canvas-кадры. Переход с View Animation на Property Animation также устраняет проблему click mismatch: View после анимации принимает касания в новом положении.

Часто задаваемые вопросы

Чем View Animation отличается от Property Animation?

View Animation меняет только отрисовку View — после анимации View остаётся на исходной позиции для событий касания. Property Animation изменяет фактические свойства объекта, что обновляет LayoutParams и корректно обрабатывает клики в новом положении.

Почему View Animation считается устаревшей?

Google объявила View Animation устаревшей с Android 3.0 (API 11). Причина — клик-несоответствие (click mismatch) и невозможность анимировать произвольные свойства объектов. Property Animation решает эти проблемы и рекомендована для всех новых проектов.

Можно ли использовать View Animation для анимации кнопок?

Использовать можно, но не рекомендуется. Кнопка после TranslateAnimation будет отображаться в новом месте, но нажатия будут срабатывать на исходной позиции. Для кнопок используйте Property Animation или композ с AnimatedVisibility в Jetpack Compose.

Как отменить View Animation программно?

Вызовите view.clearAnimation(). Если анимация запущена с fillAfter=true, View останется в конечном состоянии. Для принудительного возврата в исходное состояние вызовите clearAnimation() и invalidate().

Итоги

  • View Animation — устаревшая система Tween-анимаций Android с четырьмя типами: Alpha, Translate, Scale, Rotate
  • XML-разметка в res/anim/ с элементами , , , и корневым
  • AnimationSet объединяет анимации с общим startOffset, duration, interpolator
  • Клик-несоответствие — View после анимации остаётся на исходной позиции для событий касания
  • Property Animation — современная замена через ObjectAnimator, AnimatorSet, работающая с реальными свойствами
  • fillAfter оставляет View в конечном состоянии, но не меняет LayoutParams
  • Миграция на Property Animation устраняет click mismatch и улучшает производительность на 15-20%

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также