Россия |
Анимация в XAML-графике
№ | Код | Вид в браузере |
---|---|---|
7.7.1 | ||
<Canvas xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="200" Height="100" Background="White" x:Name="Page"> <Rectangle Canvas.Left ="5" Canvas.Top="5" Width="190" Height="90" Stroke="green" StrokeThickness="2" Fill="Transparent" /> <Rectangle Canvas.Top="40" Width="20" Height="20" Fill="red" x:Name="myRectangle"> <Rectangle.Triggers> <EventTrigger RoutedEvent=" Rectangle.Loaded"> <BeginStoryboard> <Storyboard> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="my Rectangle" Storyboard.TargetProperty="(Canvas.Left)" > <DiscreteDoubleKeyFrame Key Time="0:0:1" Value="100" /> <DiscreteDoubleKeyFrame Key Time="0:0:3" Value="180" /> </DoubleAnimationUsingKeyFrames> </Storyboard> </BeginStoryboard> </EventTrigger> </Rectangle.Triggers> </Rectangle> </Canvas> |
||
Описание | ||
После загрузки, через одну секунду прямоугольник оказывается в точке 100. Затем спустя еще две секунды он перемещается в точку 180 | ||
№ | Код | Вид в браузере |
7.7.2 | ||
<Canvas xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="200" Height="200" Background="White" x:Name="Page"> <Ellipse Canvas.Left="40" Canvas. Top="10" Width="120" Height="80" Fill="LightPink" Stroke="LightCoral" StrokeThickness="4" x:Name="FirstEllipse"> <Ellipse.Triggers> <EventTrigger RoutedEvent="Rectangle.Loaded"> <BeginStoryboard> <Storyboard> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="FirstEllipse" Storyboard.TargetProperty="Height" > <DiscreteDoubleKeyFrame KeyTime="0:0:1" Value="80" /> <DiscreteDoubleKeyFrame KeyTime= "0:0:3" Value="40" /> </DoubleAnimationUsingKeyFrames> </Storyboard> </BeginStoryboard> </EventTrigger> </Ellipse.Triggers> </Ellipse> <Ellipse Canvas.Left="40" Canvas. Top="110" Width="120" Height="80" Fill="Yellow" Stroke="Orange" StrokeThickness="4" x:Name=" SecondEllipse"> <Ellipse.Triggers> <EventTrigger RoutedEvent="Rectangle.Loaded"> <BeginStoryboard> <Storyboard> <DoubleAnimationUsingKeyFrames Storyboard.TargetName="SecondEllipse" Storyboard.TargetProperty="Height" > <DiscreteDoubleKeyFrame Key Time="0:0:1" Value="80" /> <DiscreteDoubleKeyFrame Key Time="0:0:3" Value="40" /> </DoubleAnimationUsingKeyFrames> </Storyboard> </BeginStoryboard> </EventTrigger> </Ellipse.Triggers> </Ellipse> </Canvas> |
||
Описание | ||
Использование дискретных опорных кадров для двух объектов. Эллипсы одновременно, скачком, меняют свои размеры |
Для поддержки элементов ColorAnimation, PointAnimation в случае дискретных опорных кадров используются элементы DiscreteColorKeyFrame и DiscretePointKeyFrame.
Опорные кадры сплайна
Представим себе автомобиль, стоящий на перекрестке. После того, как на светофоре появится зеленый свет, автомобиль начнет ускоряться. Достигнув положенных в городе 60 км.\ч, некоторое время он будет двигаться равномерно. Затем, подъезжая к следующему перекрестку, автомобиль начнет тормозить и полностью остановится.
Будем считать, что три участка – разгон, движение и торможение примерно равны между собой. Тогда общее перемещение автомобиля можно представить в виде кривой (сплайна) KeySpline="0.3,0 0.6,1". Здесь точки (0.3, 0) и (0.6,1) определяют квадратичную кривую Безье. Эта кривая нормализована так, что первой точкой кривой является 0.0, вторая 1.1. Пример анимации, использующий описанный сплайн, приводится в табл. 7.8.
№ | Код | Вид в браузере |
---|---|---|
7.8.1 | ||
<Canvas xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="200" Height="100" Background="White" x:Name="Page"> <Rectangle Canvas.Left ="5" Canvas.Top="5" Width="190" Height="90" Stroke="green" StrokeThickness="2" Fill="Transparent" /> <Rectangle Canvas.Top="40" Width="20" Height="20" Fill="red" x:Name="myRectangle"> <Rectangle.Triggers> <EventTrigger RoutedEvent=" Rectangle.Loaded"> <BeginStoryboard> <Storyboard> <DoubleAnimationUsingKeyFrames Storyboard.TargetName= "myRectangle" Storyboard.TargetProperty= "(Canvas.Left)" > <SplineDoubleKeyFrame Key Time="0:0:9" KeySpline="0.3,0 0.6,1" Value="200" /> </DoubleAnimationUsingKeyFrames> </Storyboard> </BeginStoryboard> </EventTrigger> </Rectangle.Triggers> </Rectangle> </Canvas> |
||
Описание | ||
Прямоугольник разгоняется примерно до одной трети своего пути, затем треть двигается равномерно, а к концу начинает замедляться. При определении значений важно помнить, что координаты фигур по-прежнему отсчитываются относительно верхней левой точки |
Варьируя значения атрибута KeySpline можно получать различные варианты замедления и ускорения анимации.