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,动画,效果,路径
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
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
![](https://img.aspxhome.com/file/2023/2/65732_0s.png)
java如何连续执行多条cmd命令
2023-07-13 13:10:41
IDEA中项目集成git提交代码的详细步骤
2021-09-08 04:33:39
![](https://img.aspxhome.com/file/2023/0/97810_0s.jpg)
java实现一个简单的网络爬虫代码示例
2021-08-05 13:59:12
Java main 方法面试题的详细整理
2023-11-24 23:53:30
MyBatis-Plus实现字段自动填充功能的示例
2022-03-06 21:48:29
![](https://img.aspxhome.com/file/2023/5/85465_0s.png)
MyEclipse2018中安装Mybatis generator插件的实现步骤
2022-02-17 03:47:37
![](https://img.aspxhome.com/file/2023/9/63649_0s.png)
使用spring通过aop获取方法参数和参数值
2022-06-04 16:28:33
C# 实现dataGridView选中一行右键出现菜单的示例代码
2022-05-12 05:15:55
![](https://img.aspxhome.com/file/2023/9/94539_0s.png)
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
![](https://img.aspxhome.com/file/2023/1/85831_0s.png)
springboot中的pom文件 project报错问题
2022-01-24 00:41:55
![](https://img.aspxhome.com/file/2023/9/62519_0s.png)
eclipse中自动生成javadoc文档的方法
2022-04-08 17:54:12
c# List find()方法返回值的问题说明(返回结果为对象的指针)
2023-11-20 21:55:34
![](https://img.aspxhome.com/file/2023/7/74817_0s.png)