Обзор анимации Windows

В этом обзоре представлены общие сведения о диспетчере анимации Windows и основные компоненты и основные понятия. Дополнительные сведения о раскадровках и переходах см. в разделе Общие сведения о раскадровке.

Этот раздел состоит из следующих подразделов.

Основные понятия

Анимация — это последовательность последовательных неподвижных изображений, которая создает иллюзию движения при воспроизведении. Использование интерактивной анимации в пользовательском интерфейсе может придать приложению уникальную индивидуальность, а также улучшить взаимодействие с пользователем. Анимация может помочь сообщить о существенных изменениях состояния в пользовательском интерфейсе и управлять сложностью пользовательского интерфейса. Анимация также может добавить в восприятие пользователем качества приложения.

Например, анимация Windows используется на панели задач для управления файлами и программами и доступа к ним, а экранная лупа — для увеличения различных частей экрана, чтобы упростить их просмотр пользователям.

Основные единицы анимации — это характеристика анимируемого визуального элемента и описание того, как эта характеристика изменяется с течением времени. Приложение может анимировать широкий спектр характеристик, таких как положение, цвет, размер, поворот, контрастность и непрозрачность.

В анимации Windows переменная анимации представляет анимированную характеристику. Переход описывает, как значение этой переменной анимации изменяется по мере возникновения анимации. Например, визуальный элемент может иметь переменную анимации, которая указывает его непрозрачность, а действие пользователя может создать переход, который принимает значение непрозрачности от 50 до 100 и представляет анимацию от полупрозрачной до полностью непрозрачной.

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

Компоненты анимации Windows

Анимация Windows состоит из следующих компонентов:

Диспетчер анимации

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

переменные анимации

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

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

Переменную анимации можно определить с помощью тега , который представляет собой связывание целочисленного идентификатора с указателем на COM-объект. Тег не обязательно должен быть уникальным, если приложение не использует его для поиска переменной. По умолчанию у переменной анимации нет тега, и любые попытки прочитать ее тег будут завершатся ошибкой, пока не будет задан один из них.

система синхронизации

Анимация Windows включает систему времени, которая помогает обеспечить отрисовку анимации с плавной и согласованной частотой кадров, а также сокращать использование системных ресурсов для отрисовки, когда система занята. Таймер помогает управлять отрисовкой анимации, автоматически указывая на прохождение небольшой единицы времени, называемой тиком. Система времени отслеживает общую производительность отрисовки системы и регулирует анимацию путем динамического увеличения или уменьшения частоты тактов. Приложения могут позволить таймеру управлять диспетчером анимации и регистрировать обработчик для уведомления до и после обновления диспетчера для каждого такта. Приложения могут указать минимальную допустимую частоту кадров анимации для таймера и получать уведомления о том, что фактическая частота кадров анимации падает ниже этой скорости.

Чтобы сэкономить системные ресурсы, можно настроить таймер так, чтобы он отключился, если анимация не выполняется.

API анимации Windows

API анимации Windows — это однопоточный COM-API, который предоставляет разработчикам следующие возможности:

  • Объект диспетчера анимации UIAnimationManager для создания объектов анимации и управления анимациями
  • Переменные и раскадровки анимации
  • Базовая библиотека UIAnimationTransitionLibrary с готовыми к использованию переходами
  • Объект таймера UIAnimationTimer для определения текущего времени и при необходимости для анимации.
  • Перехватчики событий для мониторинга состояния и хода выполнения анимации

Полный справочник по API см. в справочнике по анимации Windows. Пример кода см. в разделах Задачи анимации Windows и Примеры анимации Windows.

Конфигурации

Приложения должны получить текущее время перед планированием новой анимации. Ниже приведены механизмы времени, поддерживаемые анимацией Windows.

Анимация Application-Driven

Приложения, использующие API графики с аппаратным ускорением, могут синхронизироваться с частотой обновления монитора для отрисовки плавной анимации. Кроме того, приложение может использовать собственный механизм времени, чтобы определить, когда следует рисовать каждый кадр анимации. В любом случае приложение сообщит диспетчеру анимации, когда следует обновить его состояние. Таймер анимации по-прежнему можно использовать для определения текущего времени с высокой точностью в единицах, необходимых для диспетчера анимации.

На следующей схеме показаны взаимодействия между приложением и компонентами анимации Windows, когда приложение напрямую управляет обновлениями анимации.

схема, показывающая взаимодействия между приложением и компонентами анимации Windows, когда приложение напрямую управляет обновлениями анимации.

В простейшей конфигурации приложение будет перерисовывать все при каждом обновлении экрана, даже если анимация не воспроизводится. Чтобы избежать напрасной работы, приложение может зарегистрировать обработчик событий диспетчера, чтобы получать уведомления о запланированных анимациях, и может обнаружить пустое расписание, чтобы остановить перерисовку.

Анимация Timer-Driven

Вместо того чтобы обновлять диспетчер анимации напрямую, приложения могут позволить таймеру анимации сообщить диспетчеру анимации, когда следует обновить его состояние, и просто получать уведомления о каждом обновлении. Этот подход рекомендуется для старых ГРАФИЧЕСКИХ API. Как правило, если есть возможность синхронизироваться с частотой обновления монитора, лучше сделать это и использовать анимацию на основе приложений.

На следующей схеме показаны взаимодействия между приложением и компонентами анимации Windows, когда таймер анимации управляет обновлениями анимации.

схема, показывающая взаимодействие между приложением и компонентами анимации Windows, когда таймер анимации управляет обновлениями анимации.

Таймер можно настроить для запуска только в том случае, если анимация запланирована; Это просто вопрос передачи определенного параметра при подключении таймера и диспетчера анимации.

Дополнительные функции

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

контекстно-зависимые длительности

Длительность перехода не должна быть фиксированной; Его можно определить на основе значения и скорости анимированной переменной при начале перехода.

Сопоставление скорости

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

управление состязаниями

Если двум раскадровкам необходимо одновременно обновить одну и ту же переменную анимации, возникает конфликт планирования. Вместо того, чтобы требовать определенный числовой приоритет для каждой раскадровки, анимация Windows позволяет приложению определять относительные приоритеты любых двух раскадровок.

Управление состязаниями

Разработчики могут реализовать обратный вызов сравнения приоритетов , чтобы сравнить приоритет запланированной раскадровки и раскадровки, которая уже включена в расписание. Приложение, реализующее сравнение приоритетов, может использовать любую предпочтительную логику, чтобы определить, когда раскадровка упреждает другую. Чтобы устранить конфликт планирования, анимация Windows запрашивает приложение, какие из этих действий могут быть выполнены в следующем порядке:

  • Отмена запланированной раскадровки. Если запланированная раскадровка еще не начала воспроизводиться, она может быть отменена и немедленно удалена из расписания.
  • Обрезка запланированной раскадровки. Когда новая раскадровка обрезает запланированную раскадровку, запланированная раскадровка перестает влиять на переменную, как только новая раскадровка начинает ее анимировать. Скорости сопоставляются, что позволяет новой раскадровке плавно подниматься там, где предыдущий остался.
  • Завершите запланированную раскадровку. Раскадровка может быть завершена, только если она содержит цикл, который повторяется бесконечно. Если раскадровка находится в таком цикле после завершения, текущее повторение завершается, а остаток раскадровки затем воспроизводится. Если цикл еще не начался при завершении раскадровки, цикл полностью пропускается.
  • Сожмите запланированную раскадровку. Если обрезка или отмена запланированной раскадровки не является вариантом, раскадровка может быть завершена. Анимация Windows позволяет сжать время, доступное для запланированной раскадровки (и всех запланированных раскадровок), чтобы переменные быстрее достигли конечного состояния. При применении сжатия время временно ускоряется для затронутых раскадровок, чтобы они играли быстрее.

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

На следующей схеме показан жизненный цикл раскадровки с использованием состояний, определенных перечислением UI_ANIMATION_STORYBOARD_STATUS . Приложения используют API анимации Windows для создания раскадровки и отправки ее для планирования. Диспетчер анимации запланирует раскадровку и управляет анимацией.

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

Дополнительные сведения о планировании раскадровки и управлении ими см. в разделе Общие сведения о раскадровке.

Справочник по анимации Windows

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

Задачи анимации Windows