Общие сведения об анимации 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 при непосредственном обновлении анимации приложения.

diagram that shows the interactions between an application and the windows animation components when the application is driving animation updates directly.

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

Анимация Timer-Driven

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

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

diagram that shows the interactions between an application and the windows animation components when the animation timer is driving animation updates.

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

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

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

Длительность с учетом контекста

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

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

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

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

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

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

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

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

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

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

diagram that shows how the animation manager schedules the storyboard and manages the animation.

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

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

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

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