WPF实现动画效果(六)之路径动画

作者:天方 时间:2022-02-05 01:42:15 

WPF动画效果系列

WPF实现动画效果(一)之基本概念

WPF实现动画效果(二)之From/To/By 动画

WPF实现动画效果(三)之时间线(TimeLine)

WPF实现动画效果(四)之缓动函数

WPF实现动画效果(五)之关键帧动画

WPF实现动画效果(六)之路径动画

WPF实现动画效果(七)之演示图板

路径动画是一种专门用于将对象按照指定的Path移动的动画,虽然我们也可以通过控制动画的旋转和偏移实现对象的移动,但路径动画更专业,它的实现更加简洁明了。

路径动画中最常用的是MatrixAnimationUsingPath,它通常用于控制对象的MatrixTransform,一个简单的例子如下: 

<Canvas >
       <Canvas.Resources>
           <PathGeometry x:Key="path" Figures="M 10,100 C 35,0 135,0 160,100 180,190 285,200 310,100" />
           <Storyboard x:Key="pathStoryboard" >
               <MatrixAnimationUsingPath PathGeometry="{StaticResource path}"
                                         Storyboard.TargetName="ButtonMatrixTransform"
                                         Storyboard.TargetProperty="Matrix"
                                         DoesRotateWithTangent="True"
                                         Duration="0:0:5" RepeatBehavior="Forever" >
               </MatrixAnimationUsingPath>
           </Storyboard>
       </Canvas.Resources>

<Canvas.Triggers>
           <EventTrigger RoutedEvent="Control.Loaded">
               <BeginStoryboard Storyboard="{StaticResource pathStoryboard}" />
           </EventTrigger>
       </Canvas.Triggers>

<Path Data="{StaticResource path}" Stroke="Black" StrokeThickness="1" />

<Button Width="50" Height="20" >
           <Button.RenderTransform>
               <MatrixTransform x:Name="ButtonMatrixTransform" />
           </Button.RenderTransform>
       </Button>
   </Canvas>

注意这儿有一个DoesRotateWithTangent的属性,设置上它后,对象在移动的过程中还能根据路径的坡度旋转,非常有用。

除了MatrixAnimationUsingPath外,另外还有两种路径动画:PointAnimationUsingPath和DoubleAnimationUsingPath。PointAnimationUsingPath用于靠中心点确定位置的形状,

<Canvas >
       <Canvas.Resources>
           <PathGeometry x:Key="path" Figures="M 10,100 C 35,0 135,0 160,100 180,190 285,200 310,100" />
           <Storyboard x:Key="pathStoryboard" >
               <PointAnimationUsingPath PathGeometry="{StaticResource path}"
                                         Storyboard.TargetName="ellipse"
                                         Storyboard.TargetProperty="Center"
                                         Duration="0:0:5" RepeatBehavior="Forever" >
               </PointAnimationUsingPath>
           </Storyboard>
       </Canvas.Resources>

<Canvas.Triggers>
           <EventTrigger RoutedEvent="Control.Loaded">
               <BeginStoryboard Storyboard="{StaticResource pathStoryboard}" />
           </EventTrigger>
       </Canvas.Triggers>

<Path Data="{StaticResource path}" Stroke="Black" StrokeThickness="1" />

<Path Fill="Orange">
           <Path.Data>
               <EllipseGeometry x:Name="ellipse" Center="5,5" RadiusX="12" RadiusY="12"/>
           </Path.Data>
       </Path>
   </Canvas>

DoubleAnimationUsingPath则是通过X、Y和Angle三个属性联合实现路径的变化,一般在TranslateTransform中使用,如下就是一个简单的例子: 

<Canvas >
       <Canvas.Resources>
           <PathGeometry x:Key="path" Figures="M 10,100 C 35,0 135,0 160,100 180,190 285,200 310,100" />
           <Storyboard x:Key="pathStoryboard" >
               <DoubleAnimationUsingPath PathGeometry="{StaticResource path}"
                                         Storyboard.TargetName="translateTransform"
                                         Storyboard.TargetProperty="X"
                                         Source="X"
                                         Duration="0:0:5" RepeatBehavior="Forever" >
               </DoubleAnimationUsingPath>
               <DoubleAnimationUsingPath PathGeometry="{StaticResource path}"
                                         Storyboard.TargetName="translateTransform"
                                         Storyboard.TargetProperty="Y"
                                         Source="Y"
                                         Duration="0:0:5" RepeatBehavior="Forever" >
               </DoubleAnimationUsingPath>
           </Storyboard>
       </Canvas.Resources>

<Canvas.Triggers>
           <EventTrigger RoutedEvent="Control.Loaded">
               <BeginStoryboard Storyboard="{StaticResource pathStoryboard}" />
           </EventTrigger>
       </Canvas.Triggers>

<Path Data="{StaticResource path}" Stroke="Black" StrokeThickness="1" />

<Path Fill="Orange">
           <Path.Data>
               <EllipseGeometry x:Name="ellipse" Center="5,5" RadiusX="12" RadiusY="12"/>
           </Path.Data>
           <Path.RenderTransform>
               <TranslateTransform x:Name="translateTransform" />
           </Path.RenderTransform>
       </Path>
   </Canvas>

来源:https://www.cnblogs.com/TianFang/p/4071954.html

标签:WPF,动画,效果,路径
0
投稿

猜你喜欢

  • java中switch选择语句代码详解

    2023-09-28 19:34:29
  • SpringBoot集成Mybatis-plus并实现自动生成相关文件的示例代码

    2023-08-15 04:12:46
  • 如何在Mac下配置多个Java版本

    2023-11-07 05:14:34
  • Java 容器类源码详解 Set

    2022-03-21 18:08:40
  • Java中ResultSetMetaData 元数据的具体使用

    2021-06-25 12:38:13
  • java如何连续执行多条cmd命令

    2023-07-13 13:10:41
  • IDEA中项目集成git提交代码的详细步骤

    2021-09-08 04:33:39
  • java实现一个简单的网络爬虫代码示例

    2021-08-05 13:59:12
  • Java main 方法面试题的详细整理

    2023-11-24 23:53:30
  • MyBatis-Plus实现字段自动填充功能的示例

    2022-03-06 21:48:29
  • MyEclipse2018中安装Mybatis generator插件的实现步骤

    2022-02-17 03:47:37
  • 使用spring通过aop获取方法参数和参数值

    2022-06-04 16:28:33
  • C# 实现dataGridView选中一行右键出现菜单的示例代码

    2022-05-12 05:15:55
  • SpringMVC项目异常处理机制详解

    2023-03-12 13:13:25
  • 不使用他人jar包情况下优雅的进行dubbo调用详解

    2022-04-20 11:43:46
  • Java调用groovy脚本的方式分享

    2022-09-25 09:20:24
  • 探讨Java中函数是值传递还是引用传递问题

    2021-07-25 19:34:44
  • springboot中的pom文件 project报错问题

    2022-01-24 00:41:55
  • eclipse中自动生成javadoc文档的方法

    2022-04-08 17:54:12
  • c# List find()方法返回值的问题说明(返回结果为对象的指针)

    2023-11-20 21:55:34
  • asp之家 软件编程 m.aspxhome.com