关键帧动画

如果需要创建具体多个分段的动画和不规则移动的动画,这个时候可以使用关键帧动画。关键帧动画是由许多个较短的段构成的动画,每段表示动画的初始值、最终值或中间值。当运行动画时,它平滑的从一个值移动到另一个值。关键帧对象基本上多有Value属性和keyTimes属性。和其他普通动画不同Value属性的数据类型,在LinearPointKeyFrame类中 是Point类型,在DoubleKeyFrame类中是doubles类型。那么制作一个关键帧动画的方法如下:

<Window x:Class="属性样式.动画.关键帧动画"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

        xmlns:local="clr-namespace:属性样式.动画"

        mc:Ignorable="d"

        Title="关键帧动画" Height="300" Width="300">

    <!--窗口资源-->

    <Window.Resources>

        <!--PathGeometry:路径几何对象-->

        <PathGeometry x:Key="path">

            <!--PathFigure路径图-->

            <PathFigure IsClosed="True">

  <!--ArcSegment类:表示两点之间的一条椭圆弧。Size代表圆弧的X,Y轴半径,例子Size="55,20"表示X半径为55,Y轴半径为20的椭圆。SweepDirection获取或设置一个值,该值指定是以Clockwise[指定按顺时针(正角)方向绘制圆弧。] 方向还是以 Counterclockwise [指定按逆时针(负角)方向绘制圆-->

                <ArcSegment Point="50,300" Size="5,10" SweepDirection="Clockwise"/>

                <ArcSegment Point="100,250" Size="5,10"/>

                <ArcSegment Point="120,200" Size="5,10"/>

                <ArcSegment Point="140,150" Size="5,10"/>

                <ArcSegment Point="160,100" Size="5,10"/>

                <ArcSegment Point="180,50" Size="5,10"/>

                <ArcSegment Point="200,0" Size="5,10"/>

                <ArcSegment Point="180,10" Size="5,5"/>

                <ArcSegment Point="160,10" Size="5,10"/>

                <ArcSegment Point="140,60" Size="5,10"/>

                <ArcSegment Point="120,80" Size="5,10"/>

                <ArcSegment Point="100,100" Size="5,10"/>

                <ArcSegment Point="80,120" Size="5,10"/>

                <ArcSegment Point="60,140" Size="5,10"/>

                <ArcSegment Point="40,160" Size="5,10"/>

                <ArcSegment Point="20,180" Size="5,10"/>

                <ArcSegment Point="10,200" Size="5,10"/>

                <ArcSegment Point="0,220" Size="5,10"/>

                <ArcSegment Point="20,240" Size="5,10"/>

                <ArcSegment Point="50,260" Size="5,10"/>

                <ArcSegment Point="70,300" Size="5,10"/>

                <ArcSegment Point="250,230" Size="5,10"/>

            </PathFigure>

        </PathGeometry>

    </Window.Resources>

    <!--窗口触发器-->

    <Window.Triggers>

        <EventTrigger RoutedEvent="Window.Loaded">

            <EventTrigger.Actions>

                <BeginStoryboard>

                    <Storyboard>

                        <!--路径动画-->

                        <!--使用 PathGeometry 创建形状-->

                        <!--RepeatBehavior="Forever":设置RepeatBehavior为永久重复-->

                        <!--RepeatBehavior="Forever":设置RepeatBehavior为永久重复-->

                        <DoubleAnimationUsingPath Storyboard.TargetName="image"

                               Storyboard.TargetProperty="(Canvas.Left)"

                               PathGeometry="{StaticResource path}" Duration="0:0:5"  RepeatBehavior="Forever" Source="X"/>

                        <DoubleAnimationUsingPath Storyboard.TargetName="image"

                               Storyboard.TargetProperty="(Canvas.Top)"

                               PathGeometry="{StaticResource path}" Duration="0:0:5"           RepeatBehavior="Forever" Source="Y"/>

                    </Storyboard>

                </BeginStoryboard>

            </EventTrigger.Actions>

        </EventTrigger>

    </Window.Triggers>

    <!--画布-->

    <Canvas>

        <!--Path:形状绘图路径-->

        <Path Stroke="Red" StrokeThickness="1" Data="{StaticResource path}" Canvas.Top="11.4" Canvas.Left="1.6"/>

        <Image Name="image" Canvas.Left="-4" Canvas.Top="1" RenderTransformOrigin="-2.875,1.042">

            <Image.Source>

                <!--DrawImage是GDI+的Graphics类显示图像的核心方法-->

                <DrawingImage>

                    <DrawingImage.Drawing>

                        <!--Geometry对象并不能作为图像独立呈现出来,因此需要呈现方式:

                              这里是在GeometryDrawing中呈现

                             可以作为GeometryDrawing.Geometry的参数呈现为Drawing对象-->

                  <GeometryDrawing Brush="LightSkyBlue">

                      <GeometryDrawing.Geometry>

                          <GeometryGroup>

                            <EllipseGeometry Center="10,10" RadiusX="9" RadiusY="4"/>

                              <EllipseGeometry Center="10,10" RadiusX="4" RadiusY="9"/>

                          </GeometryGroup>

                       </GeometryDrawing.Geometry>

                        <!--获取或设置用于绘制此 GeometryDrawing 的 Pen。-->

                         <GeometryDrawing.Pen>

                         <!--Pen:用于绘制此 GeometryDrawing 的笔。 默认值为 null。-->

                              <Pen Thickness="1" Brush="Black"/>

                           </GeometryDrawing.Pen>

                        </GeometryDrawing>

                    </DrawingImage.Drawing>

                </DrawingImage>

            </Image.Source>

        </Image>

    </Canvas>

</Window>

如下是执行的结果:

动画会随着图形方向不停的滑动,不断的循环图形

 

 

资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 “STC单片机电压测量”是一个以STC系列单片机为基础的电压检测应用案例,它涵盖了硬件电路设计、软件编程以及数据处理等核心知识点。STC单片机凭借其低功耗、高性价比和丰富的I/O接口,在电子工程领域得到了广泛应用。 STC是Specialized Technology Corporation的缩写,该公司的单片机基于8051内核,具备内部振荡器、高速运算能力、ISP(在系统编程)和IAP(在应用编程)功能,非常适合用于各种嵌入式控制系统。 在源代码方面,“浅雪”风格的代码通常简洁易懂,非常适合初学者学习。其中,“main.c”文件是程序的入口,包含了电压测量的核心逻辑;“STARTUP.A51”是启动代码,负责初始化单片机的硬件环境;“电压测量_uvopt.bak”和“电压测量_uvproj.bak”可能是Keil编译器的配置文件备份,用于设置编译选项和项目配置。 对于3S锂电池电压测量,3S锂电池由三节锂离子电池串联而成,标称电压为11.1V。测量时需要考虑电池的串联特性,通过分压电路将高电压转换为单片机可接受的范围,并实时监控,防止过充或过放,以确保电池的安全和寿命。 在电压测量电路设计中,“电压测量.lnp”文件可能包含电路布局信息,而“.hex”文件是编译后的机器码,用于烧录到单片机中。电路中通常会使用ADC(模拟数字转换器)将模拟电压信号转换为数字信号供单片机处理。 在软件编程方面,“StringData.h”文件可能包含程序中使用的字符串常量和数据结构定义。处理电压数据时,可能涉及浮点数运算,需要了解STC单片机对浮点数的支持情况,以及如何高效地存储和显示电压值。 用户界面方面,“电压测量.uvgui.kidd”可能是用户界面的配置文件,用于显示测量结果。在嵌入式系统中,用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值