← Назад к вопросам

Что такое Interpolator?

2.0 Middle🔥 131 комментариев
#UI и вёрстка

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Interpolator?

Interpolator (Интерполятор) — это фундаментальная концепция в Android-анимациях, которая определяет математическую функцию, описывающую, как изменяется значение анимируемого свойства во времени. Простыми словами, интерполятор отвечает не за что анимируется, а за как проходит эта анимация: с постоянной скоростью, с ускорением, с замедлением или по более сложному закону. Он преобразует равномерно увеличивающееся входное значение (обычно от 0.0 до 1.0, где 0 — начало анимации, 1 — конец) в выходное значение, которое может следовать нелинейному пути.

Основная задача и принцип работы

График стандартной, линейной анимации — это прямая линия от 0 до 1. Интерполятор искажает эту линию, придавая анимации характер. Он реализует интерфейс TimeInterpolator (а ранее Interpolator), который содержит один ключевой метод:

interface TimeInterpolator {
    fun getInterpolation(input: Float): Float
}
  • input: Время, нормализованное в диапазон [0.0, 1.0].
  • Возвращаемое значение: Преобразованное время, также обычно в диапазоне [0.0, 1.0], но может быть и меньше 0, и больше 1 для эффектов "перелета" (overshoot).

Анимационная система использует возвращенное значение для вычисления текущего состояния свойства (позиции, прозрачности, масштаба) между начальным и конечным значениями.

Встроенные интерполяторы в Android SDK

Android предоставляет богатый набор готовых интерполяторов в пакете android.view.animation. Вот основные из них:

  • LinearInterpolator: Анимация проходит с постоянной скоростью. getInterpolation(input) просто возвращает input.
  • AccelerateInterpolator: Анимация начинается медленно и затем ускоряется. Можно задать фактор ускорения.
  • DecelerateInterpolator: Анимация начинается быстро и затем замедляется к концу.
  • AccelerateDecelerateInterpolator (По умолчанию для многих анимаций): Анимация плавно ускоряется в начале и плавно замедляется в конце, создавая естественное, "физическое" движение.
  • OvershootInterpolator: Анимация "пролетает" за конечную точку и затем возвращается к ней.
  • AnticipateInterpolator: Анимация начинается с небольшого движения в обратную сторону перед основным движением вперед.
  • BounceInterpolator: Анимация в конце имитирует отскок, как мячик.
  • CycleInterpolator: Анимация повторяется заданное количество циклов (осциллирует).

Практическое применение

Интерполятор задается для объектов анимации, таких как ValueAnimator, ObjectAnimator или ViewPropertyAnimator.

Пример с ViewPropertyAnimator:

myView.animate()
    .translationX(500f)
    .setDuration(1000L)
    .setInterpolator(AccelerateDecelerateInterpolator())
    .start()

Пример с XML-анимацией (в /res/anim/):

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/bounce_interpolator">
    ... <!-- элементы анимации -->
</set>

Создание собственного интерполятора

Для уникальных эффектов можно создать собственный интерполятор, реализовав TimeInterpolator и определив свою функцию.

Пример интерполятора с квадратичной зависимостью:

class QuadraticInterpolator : TimeInterpolator {
    override fun getInterpolation(input: Float): Float {
        // Простая квадратичная функция: ускоряется быстрее, чем линейная.
        return input * input
    }
}

Пример использования с PathInterpolator (доступен с API 21) для задания произвольной кривой по контрольным точкам:

// Создает интерполятор по кривой Безье. Точки (0,0) и (1,1) фиксированы.
val myInterpolator = PathInterpolator(0.2f, 0.8f, 0.4f, 1f)

Ключевые выводы

  1. Интерполятор управляет темпом анимации, а не ее содержимым. Это важнейший инструмент для создания естественных, приятных для пользователя движений, соответствующих материальному дизайну.
  2. Использование нелинейных интерполяторов (AccelerateDecelerate, Decelerate) делает интерфейс визуально комфортнее, чем чисто линейные анимации, имитируя инерцию объектов реального мира.
  3. Правильный выбор интерполятора — это вопрос UX. Например, для реакции на тап часто используют AccelerateDecelerateInterpolator, а для скрытия элемента из поля зрения — AccelerateInterpolator.
  4. Интерполяторы тесно связаны с TypeEvaluator, который вычисляет конкретные значения свойств (например, цвет между красным и синим), в то время как интерполятор определяет долю прогресса между этими состояниями в каждый момент времени.

Таким образом, Interpolator — это мощный и гибкий механизм, позволяющий разработчику контролировать временну́ю кривую любой анимации, что напрямую влияет на качество и восприятие пользовательского интерфейса.

Что такое Interpolator? | PrepBro