Поделиться через


Пружинные анимации

В статье показано, как использовать spring NaturalMotionAnimations.

Необходимые компоненты

Здесь предполагается, что вы знакомы с понятиями, описанными в следующих статьях:

Почему весной?

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

Перемещение с помощью спринговой анимацииДвижение с анимацией

Использование springs в пользовательском интерфейсе

Как упоминалось ранее, springs может быть полезным движением для интеграции в приложение, чтобы представить очень знакомый и игривый пользовательский интерфейс. Распространенные варианты использования springs в пользовательском интерфейсе:

Описание использования Spring Визуальный пример
Создание опыта движения "pop" и смотреть livelier. (Анимация масштабирования) Масштабирование движения с помощью анимации с помощью спринговой анимации
Создание опыта движения немного чувствует себя более энергичным (анимация смещения) Смещение движения с помощью спринговой анимации

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

Спринговая анимация колебания

Определение весеннего движения

Вы создаете весенний интерфейс с помощью API NaturalMotionAnimation. В частности, вы создаете SpringNaturalMotionAnimation с помощью методов Create* вне Compositor. Затем вы можете определить следующие свойства движения:

  • ДемпирингРатио — выражает уровень оглушения весеннего движения, используемого в анимации.
Значение коэффициента демпфирования Description
ДемпирингРатио = 0 Безумно - весной будет колебаться в течение длительного времени
0 < ДемпирингРатио < 1 Недоумеченный - весной будет колебаться от немного до много.
ДемпирингРатио = 1 Критично прибавлено - весной не будет выполняться колебания.
Демпирация > 1 Переполнено - весна быстро достигнет своего назначения с резким замедлением и без колебаний
  • Период — время, затрачаемое на весну, чтобы выполнить одно колебание.
  • Окончательное или начальное значение — определенное начальное и конечное позиции спрингового движения (если оно не определено, начальное значение и/или конечное значение будет текущим).
  • Начальная скорость — программная начальная скорость движения.

Можно также определить набор свойств движения, которые совпадают с keyFrameAnimations:

  • Поведение задержки и задержки
  • StopBehavior

В распространенных случаях анимации смещения и масштабирования и размера следующие значения рекомендуется командой Windows Design для демпирингаRatio и Period для различных типов весной:

Свойство Обычная весна Оглушенная весна Менее оглушенная весной
Смещение Коэффициент деммпинга = 0,8
Период = 50 мс
Коэффициент деммпинга = 0,85
Период = 50 мс
Коэффициент демортизации = 0,65
Период = 60 мс
Масштабирование и размер Коэффициент деммпинга = 0,7
Период = 50 мс
Коэффициент деммпинга = 0,8
Период = 50 мс
Коэффициент деммпинга = 0,6
Период = 60 мс

Определив свойства, вы можете передать spring NaturalMotionAnimation в метод StartAnimation объекта CompositionObject или свойства Motion объекта InteractionTracker InertiaModifier.

Пример

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

Анимация Spring при щелчке

Начните с определения весенней анимации в событии щелчка при появлении области навигации. Затем вы определяете свойства анимации, используя функцию InitialValueExpression для определения FinalValue. Вы также следите за тем, открывается ли панель и когда она будет готова, запустите анимацию.

private void Button_Clicked(object sender, RoutedEventArgs e)
{
 _springAnimation = _compositor.CreateSpringScalarAnimation();
 _springAnimation.DampingRatio = 0.75f;
 _springAnimation.Period = TimeSpan.FromSeconds(0.5);

 if (!_expanded)
 {
 _expanded = true;
 _propSet.InsertBoolean("expanded", true);
 _springAnimation.InitialValueExpression["FinalValue"] = "this.StartingValue + 250";
 } else
 {
 _expanded = false;
 _propSet.InsertBoolean("expanded", false);
_springAnimation.InitialValueExpression["FinalValue"] = "this.StartingValue - 250";
 }
 _naviPane.StartAnimation("Offset.X", _springAnimation);
}

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

Анимация spring при прокрутке

Для этого вы можете взять ту же спринговую анимацию и передать ее в инерционныйmodifier с помощью InteractionTracker. Дополнительные сведения о InputAnimations и InteractionTracker см. в разделе "Пользовательские манипуляции" с помощью InteractionTracker. Предположим, что в этом примере кода вы уже настроили InteractionTracker и VisualInteractionSource. Мы сосредоточимся на создании инерционныхmodifiers, которые будут принимать в NaturalMotionAnimation, в этом случае весной.

// InteractionTracker and the VisualInteractionSource previously setup
// The open and close ScalarSpringAnimations defined earlier
private void SetupInput()
{
 // Define the InertiaModifier to manage the open motion
 var openMotionModifer = InteractionTrackerInertiaNaturalMotion.Create(compositor);

 // Condition defines to use open animation if panes in non-expanded view
 // Property set value to track if open or closed is managed in other part of code
 openMotionModifer.Condition = _compositor.CreateExpressionAnimation(
"propset.expanded == false");
 openMotionModifer.Condition.SetReferenceParameter("propSet", _propSet);
 openMotionModifer.NaturalMotion = _openSpringAnimation;

 // Define the InertiaModifer to manage the close motion
 var closeMotionModifier = InteractionTrackerInertiaNaturalMotion.Create(_compositor);

 // Condition defines to use close animation if panes in expanded view
 // Property set value to track if open or closed is managed in other part of code
 closeMotionModifier.Condition = 
_compositor.CreateExpressionAnimation("propSet.expanded == true");
 closeMotionModifier.Condition.SetReferenceParameter("propSet", _propSet);
 closeMotionModifier.NaturalMotion = _closeSpringAnimation;

 _tracker.ConfigurePositionXInertiaModifiers(new 
InteractionTrackerInertiaNaturalMotion[] { openMotionModifer, closeMotionModifier});

 // Take output of InteractionTracker and assign to the pane
 var exp = _compositor.CreateExpressionAnimation("-tracker.Position.X");
 exp.SetReferenceParameter("tracker", _tracker);
 ElementCompositionPreview.GetElementVisual(pageNavigation).
StartAnimation("Translation.X", exp);
}

Теперь в пользовательском интерфейсе есть как программная, так и весна анимация на основе входных данных!

В итоге действия по использованию весенней анимации в приложении:

  1. Создайте SpringAnimation с помощью Compositor.
  2. Определите свойства SpringAnimation, если вы хотите, чтобы значения, отличные от значений по умолчанию:
    • ДемпингРатио
    • Период
    • Окончательное значение
    • Начальное значение
    • Начальная скорость
  3. Назначение целевому объекту.
    • Если вы анимируете свойство CompositionObject, передайте springAnimation в качестве параметра в StartAnimation.
    • Если вы хотите использовать с входными данными, задайте для свойства NaturalMotion для инерционногоmodifier значение SpringAnimation.