Северный (Арктический) федеральный университет им. М.В. Ломоносова
Опубликован: 10.04.2014 | Доступ: свободный | Студентов: 6824 / 1221 | Длительность: 14:18:00
Специальности: Программист
Лекция 7:

Работа с базами данных, графикой и анимацией. Разработка игр

16.3 Анимация

Android предоставляет мощные API для анимации элементов пользовательского интерфейса и построения 2D и 3D изображений.

Платформа Android предоставляет две системы анимации: анимация свойств, появившаяся в Android 3.0, и анимация компонентов пользовательского интерфейса (наследников класса View). Рассмотрим подробнее обе эти системы.

Анимация свойств (Property Animation). Система анимации свойств позволяет определить анимацию для изменения любого свойства объекта, независимо от того изображается оно на экране или нет. Используя эту систему, можно задать следующие характеристики анимации:

  • Продолжительность предполагает задание длительности временного промежутка выполнения анимации, по умолчанию это значение равно 300 мс.
  • Временная интерполяция предполагает вычисление значения свойства в каждый момент времени, как функции от промежутка времени, прошедшего с начала анимации.
  • Количество повторов и поведение определяет необходимость повторения анимации при достижении конца заданного временного промежутка, а также количество повторов в случае необходимости. Эта же характеристика позволяет задать возможность воспроизведения в обратном порядке, если эта возможность выбрана, то анимация прокручивается вперед-назад заданное число раз.
  • Группа анимаций позволяет организовать анимации в некоторое множество и задать режим исполнения: одновременно, последовательно непрерывно или с некоторыми задержками.
  • Частота обновления кадров определяет, как часто будет происходить смена кадров анимации. По умолчанию обновление происходит каждые 10 мс, однако скорость, с которой приложение сможет обновлять кадры, в конечном итоге, зависит от загруженности системы.

Большая часть API системы анимации свойств находится в пакете android.animation. Также можно использовать блоки интерполяции, определенные в пакете android.view.animation.

Класс Animator предоставляет базовую структуру для создания анимации. Напрямую этот класс обычно не используется, так как обеспечивает минимальную функциональность, поэтому чаще всего используются классы-наследники, расширяющие возможности класса Animator. Рассмотрим основные классы, используемые для создания анимации свойств.

  • ValueAnimator (потомок класса Animator). Этот класс является главным обработчиком распределения времени для анимации свойств, а также рассчитывает значения свойства, предназначенного для анимации. Он обеспечивает всю основную функциональность: рассчитывает значения анимации и содержит распределенные во времени детали каждой анимации; содержит информацию о необходимости повторений анимации; содержит слушателей, получающих уведомления о событиях обновления; предоставляет возможность задавать пользовательские типы для вычисления. В процессе анимации свойств можно выделить две части: вычисление значения свойства, для которого определяется анимация, и присвоение полученного значения соответствующему полю объекта. ValueAnimator не выполняет вторую часть, поэтому необходимо следить за обновлениями значений, вычисляемых в классе ValueAnimator, и изменять объекты, подверженные анимации. Наглядно рассмотренные части анимации с использованием класса ValueAnimator представлены на рис. 16.2.
    Процесс анимации свойств с использованием класса ValueAnimator

    увеличить изображение
    Рис. 16.2. Процесс анимации свойств с использованием класса ValueAnimator
  • AnimatorSet (потомок класса Animator). Предоставляет механизмы группировки анимаций, таким образом, что они выполняются некоторым образом относительно друг друга. Можно определять выполнение анимаций одновременно, последовательно и с временными задержками.

Классы-вычислители определяют как вычислять значения заданных свойств. Они получают: данные о распределение времени, предоставляемые классом Animator, начальное и конечное значения свойства, после чего на основе этих данных вычисляют значения свойства, для которого выполняется анимация. В системе анимации свойств существуют следующие вычислители:

  • IntEvaluator для вычисления целочисленных значений свойств;
  • FloatEvaluator для вычисления вещественных значений свойств;
  • ArgbEvaluator для вычисления значений цвета в шестнадцатеричном представлении;
  • TypeEvaluator - интерфейс, позволяющий создавать собственных вычислителей.

Интерполяторы определяют с помощью каких функций от времени, вычисляются значения свойств, для которых задается анимация. Интерполяторы определены в пакете android.view.animation. Если ни один из существующих интерполяторов не подходит, можно создать собственный, реализовав интерфейс TimeInterpolator.

Подробнее с системой анимации свойств можно познакомиться по ссылке: http://developer.android.com/guide/topics/graphics/prop-animation.html.

Анимация компонентов пользовательского интерфейса. Эта система может быть использована для реализации анимации преобразований над наследниками класса View. Для расчета анимации преобразований используется следующая информация: начальная точка, конечная точка, размер, поворот и другие общие аспекты анимации. Анимация преобразований может выполнять серии простых изменений содержимого экземпляра класса View. Например, для текстового поля можно перемещать, вращать, растягивать, сжимать текст, если определено фоновое изображение, оно должно изменяться вместе с текстом. Пакет android.view.animation предоставляет все классы, необходимые для реализации анимации преобразований.

Для задания последовательности инструкций анимации преобразований можно использовать или XML, или Android код. Более предпочтительным является определение анимации в XML файлах, располагаться эти файлы должны в папке res/anim/ проекта. XML файл должен иметь единственный корневой элемент, это может быть любой из отдельных элементов: <alpha>, <scale>, <translate>, <rotate>, интерполятор, или же элемент <set>, который содержит группы этих элементов, в том числе может содержать другие элементы <set>. По умолчанию инструкции анимации выполняются одновременно, чтобы задать последовательное исполнение необходимо определить атрибут startOffset.

Подробнее с системой анимации преобразований можно познакомиться по ссылке: http://developer.android.com/guide/topics/graphics/view-animation.html.

Дополнительно к рассмотренным системам анимации может использоваться, кадровая анимация, которая реализуется быстрой сменой кадров, каждый кадр является графическим ресурсом и располагается в папке res/drawable/ проекта.

Подробнее с кадровой анимацией можно познакомиться по ссылке: http://developer.android.com/guide/topics/graphics/drawable-animation.html.

Марат Нуриджанян
Марат Нуриджанян

Пример: Скачать среду можно с сайта для разработчиков Android (http://developer.android.com/sdk/index.html).

Там скачать можно только Android Studio

Владимир Каункин
Владимир Каункин

В самостоятельной работе 2 в примере решения задания некорректно загадывается число (в двух местах), выбирая случайное целое число из диапазона [0, 99] вместо [1, 100], как того требует условие. Кроме того, загадывание числа всё таки лучше вынести в отдельный метод, как мне кажется.