当前位置:   article > 正文

WPF-关于动画Animation(及其常见问题)_storyboard doublecollection animation

storyboard doublecollection animation

目录

一、动画合集

常见动画类型

1、资源里添加动画资源

2、事件触发器里开始一个动画

3、Double型关键帧动画

4、Object型关键帧动画 

5、Color型关键帧动画

6、String型关键帧动画

7、Matrix型沿路径动画

二、扩展

Ⅰ 动画常见问题

1、控制动画结束问题

Ⅱ 流动Path

Ⅲ 变形


一、动画合集

创建一个Storyboard演示画板,在画板里对动画进行定义与处理。

常见动画类型

提醒:更多动画类型及介绍可查看:动画概述-WPF .NET Framework

DoubleAnimation                               //普通Double型控制动画

DoubleAnimationUsingKeyFrames //Double型关键帧动画

ObjectAnimationUsingKeyFrames  //Object型关键帧动画

ColorAnimationUsingKeyFrames    //Color型关键帧动画

StringAnimationUsingKeyFrames    //String型关键帧动画

MatrixAnimationUsingPath              //沿路径型动画

1、资源里添加动画资源

注意:开始动画得自己规划逻辑(触发器、事件都可)

  1. var storybd = this.FindResource("storybd") as Storyboard;
  2. storybd.Begin();
  1. <Window.Resources>
  2. <Storyboard x:Key="storybd">
  3. <DoubleAnimation AutoReverse="True"
  4. By="0.1"
  5. RepeatBehavior="Forever"
  6. Storyboard.TargetName="btn"
  7. Storyboard.TargetProperty="Opacity"
  8. From="0.0" />
  9. <DoubleAnimation AutoReverse="True"
  10. RepeatBehavior="Forever"
  11. Storyboard.TargetName="btn"
  12. Storyboard.TargetProperty="(Control.Background).(RadialGradientBrush.GradientStops)[1].Offset"
  13. From="1"
  14. To="0"
  15. Duration="0:0:1" />
  16. </Storyboard>
  17. </Window.Resources>

2、事件触发器里开始一个动画

  1. <Rectangle Name="Rect"
  2. Width="70"
  3. Height="80"
  4. Margin="279,0,0,0"
  5. HorizontalAlignment="Left"
  6. VerticalAlignment="Center"
  7. Fill="Green">
  8. <Rectangle.Triggers>
  9. <EventTrigger RoutedEvent="Rectangle.Loaded">
  10. <BeginStoryboard>
  11. <Storyboard>
  12. <DoubleAnimation AutoReverse="True"
  13. RepeatBehavior="Forever"
  14. Storyboard.TargetName="Rect"
  15. Storyboard.TargetProperty="Opacity"
  16. From="1"
  17. To="0"
  18. Duration="0:0:1" />
  19. </Storyboard>
  20. </BeginStoryboard>
  21. </EventTrigger>
  22. </Rectangle.Triggers>
  23. </Rectangle>

3、Double型关键帧动画

  1. <DoubleAnimationUsingKeyFrames AutoReverse="True"
  2. RepeatBehavior="Forever"
  3. Storyboard.TargetName="Rect"
  4. Storyboard.TargetProperty="(FrameworkElement.Width)">
  5. <EasingDoubleKeyFrame KeyTime="0:0:0" Value="0" />
  6. <EasingDoubleKeyFrame KeyTime="0:0:5" Value="70" />
  7. </DoubleAnimationUsingKeyFrames>
  8. <DoubleAnimationUsingKeyFrames AutoReverse="True"
  9. RepeatBehavior="Forever"
  10. Storyboard.TargetName="Rect"
  11. Storyboard.TargetProperty="(FrameworkElement.Height)">
  12. <EasingDoubleKeyFrame KeyTime="0:0:0" Value="0" />
  13. <EasingDoubleKeyFrame KeyTime="0:0:5" Value="80" />
  14. </DoubleAnimationUsingKeyFrames>

4、Object型关键帧动画 

  1. <Window.Resources>
  2. <Storyboard x:Key="story">
  3. <ObjectAnimationUsingKeyFrames Storyboard.TargetName="img" AutoReverse="True" RepeatBehavior="Forever" Storyboard.TargetProperty="(UIElement.Visibility)">
  4. <DiscreteObjectKeyFrame KeyTime="0:0:0.03" Value="{x:Static Visibility.Hidden}"/>
  5. <DiscreteObjectKeyFrame KeyTime="0:0:0.06" Value="{x:Static Visibility.Visible}"/>
  6. </ObjectAnimationUsingKeyFrames>
  7. </Storyboard>
  8. </Window.Resources>

5、Color型关键帧动画

  1. <Storyboard x:Key="story">
  2. <ColorAnimationUsingKeyFrames AutoReverse="True"
  3. RepeatBehavior="Forever"
  4. Storyboard.TargetName="btn"
  5. Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)">
  6. <EasingColorKeyFrame KeyTime="0" Value="Red" />
  7. <EasingColorKeyFrame KeyTime="0:0:0.5" Value="Blue" />
  8. <DiscreteColorKeyFrame KeyTime="0:0:1" Value="Red" />
  9. <DiscreteColorKeyFrame KeyTime="0:0:1.5" Value="Yellow" />
  10. </ColorAnimationUsingKeyFrames>
  11. </Storyboard>

6、String型关键帧动画

FillBehavior,动画结束时行为

                        HoldEnd:保持在动画结束的最后一帧画面

                        Stop:动画结束,恢复动画开始前的画面

  1. <StringAnimationUsingKeyFrames FillBehavior="HoldEnd"
  2. Storyboard.TargetName="btn"
  3. Storyboard.TargetProperty="(Button.Content)">
  4. <DiscreteStringKeyFrame KeyTime="0" Value="5s" />
  5. <DiscreteStringKeyFrame KeyTime="0:0:1" Value="4s" />
  6. <DiscreteStringKeyFrame KeyTime="0:0:2" Value="3s" />
  7. <DiscreteStringKeyFrame KeyTime="0:0:3" Value="2s" />
  8. <DiscreteStringKeyFrame KeyTime="0:0:4" Value="1s" />
  9. <DiscreteStringKeyFrame KeyTime="0:0:5" Value="0s" />
  10. </StringAnimationUsingKeyFrames>

7、Matrix型沿路径动画

使用如下:

移动控件可用RenderTransformOrigin="0.5,0.5",切换位置转换的中心点;

DoesRotateWithTangent:按切换方向旋转;

PathGeometry:指定路径;

  1. <Rectangle.RenderTransform>
  2. <MatrixTransform />
  3. </Rectangle.RenderTransform>
  4. <MatrixAnimationUsingPath AutoReverse="True"
  5. DoesRotateWithTangent="True"
  6. PathGeometry="{StaticResource Path2}"
  7. RepeatBehavior="Forever"
  8. Storyboard.TargetName="Rect"
  9. Storyboard.TargetProperty="RenderTransform.Matrix"
  10. Duration="0:0:3" />

二、扩展

Ⅰ 动画常见问题

1、控制动画结束问题

 storyBoard.Begin(containObject,true);

注意:第二个参数(是否可控)必须给true才能控制动画停止;

2、开始动画失败

下方示例,运行会报错 :

  1. DoubleAnimation da = new DoubleAnimation()
  2. {
  3. From = 1,
  4. To = 0,
  5. AutoReverse = true,
  6. Duration = TimeSpan.FromSeconds(0.5),
  7. RepeatBehavior = RepeatBehavior.Forever
  8. };
  9. //Button btn
  10. btn.Background = Brushes.Yellow;
  11. btn.Background.BeginAnimation(Brush.OpacityProperty, da);

原因在于:btn.Background = Brushes.Yellow;

 由于Brushes.Yellow为sealed 密封对象,所以其属性不能更改,若一个动画对其某属性值进行改变,就会报错;

解决,将该语句改成:

btn.Background=

        new SolidColorBrush((Color)ColorConverter.ConvertFromString("Yellow"));

Ⅱ 流动Path

 StrokeDashArray :分段长度

 StrokeDashOffset:分段偏移值(改变该值实现流动效果)

 StrokeDashArray="5"  StrokeDashOffset="{Binding OffSet}"

Ⅲ 变形

控制变形的属性:RenderTransform:呈现变形(定义在UIElement类中);

                             LayoutTransform:布局变形(定义在FrameworkElement类中);

 其数据类型都是Transform抽象类

 Transform派生类;

  • TranslateTransform:偏移变形,X设置右移动值,Y设置底部移动值;
  • RotateTransform:旋转变形,Angle设置旋转中心,CenterX与CenterY设置旋转中心;
  • ScaleTransform:缩放变形,ScaleX、ScaleY分别设置X、Y轴方向放大倍数;
  • SkewTransform:倾斜变形,可指定X轴和Y轴方向的倾斜角度;
  • TransformGroup:变形组(多个独立变形合成一个变形组),可同时执行多种变形;
  • MatrixTransform:矩阵变形,Matrix有6个值(M11,M12,M21,M22,OffsetX,OffsetY),M11和M22默认值1,用于在x和y方向上的伸缩,M12和M21默认值0,用于倾斜控件,OffsetX和OffsetY默认值为0,用于平移控件,当值(1,0,0,1,0,0)不改变元素,值(0.5,1.4,0.4,0.5,-200,0)会重置元素的大小、倾斜和平移元素;
  1. <Button.RenderTransform>
  2. <TransformGroup>
  3. <TranslateTransform X="30" Y="-30"/>
  4. <ScaleTransform ScaleX="0.8" ScaleY="0.8"/>
  5. <RotateTransform Angle="40" CenterX="0" CenterY="0"/>
  6. <SkewTransform AngleX="10" AngleY="10" CenterX="0" CenterY="0"/>
  7. <MatrixTransform Matrix="1,0,0,1,0,0"/>
  8. </TransformGroup>
  9. </Button.RenderTransform>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/511826
推荐阅读
相关标签
  

闽ICP备14008679号