Освой Android играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Animation и Transition

Считается, что продолжительность анимации должна находиться в пределах от 200 до 500 миллисекунд. Это связано с особенностями человеческого мозга - если длительность будет меньше, то анимация воспринимается как слишком быстрая, а если больше - то слишком медленная. Согласно правилам Material Design, анимация для телефонов должна быть 200-300 мс, для планшетов - 400-450 (из-за размеров). Веб-анимации делаются ещё быстрее, в пределах 150-200 мс.

Полное руководство по использованию анимации в UX

Normal speed

Animation

Самый старый тип анимации, который сейчас считается устаревшим. Может встречаться в старых проектах или для несложных примеров.

Бывает двух видов:

Кроме собственных анимаций можно использовать встроенные ресурсы для анимаций:


@android:anim/slide_in_left
@android:anim/slide_out_right
android.R.anim.fade_in
android.R.anim.fade_out

Для создания реалистичных анимаций следует использовать класс Interpolator.

Примеры анимаций

ScaleAnimation и <scale>

AlphaAnimation и <alpha>

TranslateAnimation и <translate>

RotateAnimation и <rotate>

Класс AnimationUtils

Метод overridePendingTransition() - анимации между активностями

LayoutAnimation - Анимация разметки и групп компонентов

Анимация переходов у ViewFlipper

Анимация у ViewPager

Анимация кнопки

Анимация ListView и ListActivity

Анимация фрагментов

Animator

ValueAnimator

Появился в Android 3.0. Нужно указать начальное и конечное значение, далее указать слушатель, в котором будут приходить промежуточные значения, и тогда будет возможность применить анимацию.

Общий пример для ValueAnimator

Анимация для FAB

Падают, падают, падают листья (ValueAnimator)

ValueAnimator: Развернуть/свернуть панель

ObjectAnimator

В Android 3.0 появился класс ObjectAnimator.

Позволяет создавать стандартные виды анимации (прозрачность, перемещение, масштабирование, цвет).

Статья об ObjectAnimator (другие примеры на Kotlin.

ObjectAnimator. Вычислители

ObjectAnimator. Состояния анимации

ObjectAnimator. Анимация шариков

ObjectAnimator. Interpolator

Взрывная анимация

ViewPropertyAnimator

Появилась в Android 3.1 (API 12). Очень удобное использование - выбираете компонент и указываете цепочкой набор анимаций, которые выполняются параллельно или последовательно. Используется класс Animator.

Доступны анимации прозрачности, масштабирования, перемещения. Также можно установить длительность, задержку, интерполяторы.

Статья о ViewPropertyAnimator.

Ripple

Эффект Ripple появился в Android 5.0 и был доступен из коробки. Достаточно подключить нужный системный атрибут.


?android:attr/selectableItemBackground
?android:attr/selectableItemBackgroundBorderless

Также можно задать собственные виды эффекта при помощи RippleDrawable.

Статья о RippleDrawable.

createCircularReveal()

В Android 5.0 появился новый эффект появления, когда отображается или скрывается группа элементов интерфейса. Класс содержит всего один метод.

Класс ViewAnimationUtils и метод createCircularReveal().

AnimatedVectorDrawable

В Android 5.0 Lollipop появилась поддержка векторных изображений и анимация с ними. Позже векторные изображения стали доступны и для старых устройств через библиотеку совместимости.

Читать статью о AnimatedVectorDrawable.

Дальнейшее развитие анимации векторных изображений - SeekableAnimatedVectorDrawable.

androidx.dynamicanimation.animation (устар. support-dynamic-animation)

SpringAnimation, FlingAnimation

Transition

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

Класс TransitionDrawable (третий курс)

TransitionManager (шестой курс)

Scene (шестой курс)

Превращения между экранами активностей (Android 5.0, API 21) (седьмой курс)

Переход общих элементов между экранами активностей (Android 5.0, API 21) (седьмой курс)

Закрытая зона

Всплывающая панель (второй курс)

Анимация с использованием Matrix (второй курс)

TimeAnimator (второй курс)

Анимация диалоговых окон (третий курс)

Управляй мечтой (третий курс)

Новые анимации активностей в Android 4.1 (Jelly Bean) (третий курс)

animateLayoutChanges - Анимация при изменении разметки (четвёртый курс)

Динамическое добавление компонентов через анимацию (четвёртый курс)

Анимация при вращении устройства (Android 4.3) (пятый курс)

StateListAnimator

Дополнительное чтение

Видео DevBytes: Cardflip Animation - анимация для игральных карт на основе ImageView. Исходник.

Видео DevBytes: Custom Activity Animations - GridLayout с превьюшками. При нажатии на картинку она всплывает в большом размере и пояснительным текстом. Исходник

Видео DevBytes: Animating ListView Deletion - Анимация при удалении элементов в ListView. Исходник

Codedependent: DevBytes: Anticipation & Overshoot, Part 2 - Мультяшная анимация при перемещении кнопки (видео и исходник)

Видео DevBytes Sliding Fragments - YouTube - Исходник

Видео DevBytes: Folding Layout - YouTube - эффект складывающей гармошки. Исходник

Библиотеки для анимации

Реклама