WPF(Windows10通用应用程序开发) 线性插值动画 or 帧动画学习笔记及实例

  • 线性插值动画:
  1. [Storyboard]基本属性:

    TargetProperty:目标属性

    TargetName:目标名称    

    From:指向属性的初始值;(可省略)

    To/By:(二选一)

      To:指向属性动画完成后的值;(可省略)  

      By:指向属性初始值增加的值;(可省略)

    Duration:动画执行时间:格式:hh:mm:ss(如:0:0:1表示动画执行1s)

    AutoReverse:时间线(动画)达到Duration终点时是否倒退(true/false)

    RepeatBehavior:表示时间线(动画)播放次数

      ·Forever:表示动画一直运行;

      ·RepeatBehavior = "3x":表示动画执行3次(次数后面加‘x’作为原意字符)

      ·"[天.]hh:mm:ss[.秒的小数部分]":等于此格式表示 动画重复执行时间

    例(利用时间触发器):

<StackPanel x:Name="abc">
        <Rectangle x:Name="rect" Width="0" Height="100">
            <Rectangle.Fill>
                <SolidColorBrush Color="Blue"/>
            </Rectangle.Fill>
            <Rectangle.Triggers>
                <EventTrigger RoutedEvent="Loaded">//加载事件触发器
                    <BeginStoryboard>
                        <Storyboard RepeatBehavior="Forever" AutoReverse="True">//设置动画倒退并无限播放
                            <DoubleAnimation
                                Storyboard.TargetName="rect"//目标属性名称
                                Storyboard.TargetProperty="Width"//设置目标属性
                                From="100" To="200" Duration="0:0:3" />//From:设置初始属性的值 To:设置最后的属性的值 Duration:设置动画播放时间为3s
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Rectangle.Triggers>
        </Rectangle>
    </StackPanel>

    2.[Storyboard]动画类型属性:

    DoubleAnimation:变化动画

      ·TarnslateTransform:实现偏移动画

      ·RotateTransform:实现旋转动画

      ·ScaleTransform:实现缩放动画

    例:

<Canvas x:Name="canvasS" Loaded="Canvas_Loaded">
        <Canvas.Resources>
            <Storyboard x:Key="storyBoard">
                <DoubleAnimation Storyboard.TargetName="scaleTransfrom"
                             Storyboard.TargetProperty="ScaleY"
                             From="1" To="2" Duration="0:0:3" //设置scaleTransfrom沿Y轴放大两倍
                             AutoReverse="True" RepeatBehavior="Forever"/>
            </Storyboard>
        </Canvas.Resources>
        <Rectangle x:Name="rectangle" Height="50" Width="50" Canvas.Left="75" Canvas.Top="75" Fill="Blue">
            <Rectangle.RenderTransform>
                <ScaleTransform x:Name="scaleTransfrom"/>//设置属性名称为ScaleTransform
       </Rectangle.RenderTransform>      </Rectangle>      </Canvas> 

private void Canvas_Loaded(object sender, RoutedEventArgs e) { rectangle.BeginStoryboard((Storyboard)canvasS.Resources["storyBoard"]); }

    ColorAnimation:颜色渐变动画

      例1(利用事件,在后台事件控制播放动画):

 <Window.Resources>
        <Storyboard x:Key="storyboard1">
            <ColorAnimation From="Red" To="Yellow" //从红色渐变成黄色
                            Storyboard.TargetName="button1"
                            Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)" //(Button.Background).(SolidColorBrush.Color)表示目标属性为Button.Background类型为SolidColorBrush.Color的Color属性
                            Duration="0:0:5"
                            ></ColorAnimation>
        </Storyboard>
    </Window.Resources>
    <Grid>
        <Button x:Name="button" Content="start" Margin="10,10,10,0" VerticalAlignment="Top" Click="button_Click"/>
        <Button x:Name="button1" Content="Test" Margin="10,41,10,0" VerticalAlignment="Top"/>
    </Grid>

 private void button_Click(object sender, RoutedEventArgs e)
        {
            button1.BeginStoryboard((Storyboard)this.Resources["storyboard1"]);
        }

例2(使用触发器控制播放动画):

 <Button  Content="Another Button" Height="30" Width="200"   HorizontalAlignment="Left">
                <Button.Background>
                    <SolidColorBrush x:Name="myAnimatedBrush" Color="Blue" />
                </Button.Background>
                <Button.Triggers>
                    <!-- Animates the color of the brush used to paint the second button from red to blue . -->
                    <EventTrigger RoutedEvent="Button.Click">
                        <BeginStoryboard>
                            <Storyboard>
                                <ColorAnimation  Storyboard.TargetName="myAnimatedBrush"
                                                 Storyboard.TargetProperty="Color"
                                                 From="Red" To="Blue" Duration="0:0:7" />
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </Button.Triggers>
            </Button>

  

    PointAnimation:Path图形动画

    在PathGeometry创建图形,改变图形中的某些点实现动画

例:扇形动画

利用四条曲线组合成一个圆,最后用一条直线连接圆心组成一个闭合图形,控制第三个扇形的第三个点,实现小精灵张嘴闭嘴的动画

  <Window.Resources>
        <Storyboard x:Name="storyboard1" x:Key="storyBoard">
            <PointAnimation From="60,10" To="100,50" Duration="0:0:2"
                                Storyboard.TargetName="bezierSegment" Storyboard.TargetProperty="Point3"
                                RepeatBehavior="5" AutoReverse="True"
                                />
        </Storyboard>
    </Window.Resources>
    <StackPanel x:Name="path" Loaded="StackPanel_Loaded">
            <Button Content="运行动画" Click="Button_Click"/>
            <Path  Fill="#FF4080FF" HorizontalAlignment="Left" Height="100" Width="100" Margin="162,164,0,0" VerticalAlignment="Top" Stretch="Fill">
                <Path.Data>
                    <PathGeometry>
                        <PathFigure StartPoint="100,50">
                            <BezierSegment Point1="100,77.6142" Point2="77.6142,100" Point3="50,100"></BezierSegment>
                            <BezierSegment Point1="22.3858,100" Point2="0,77.6142" Point3="0,50"></BezierSegment>
                            <BezierSegment Point1="0,22.3858" Point2="22.3858,0" Point3="50,0"></BezierSegment>
                            <BezierSegment x:Name="bezierSegment" Point1="77.6142,0" Point2="100,22.3858" Point3="100,50"></BezierSegment>
                            <LineSegment Point="50,50"/>
                            <!--形成一个闭合图形-->
                        </PathFigure>
                    </PathGeometry>
                </Path.Data>
            </Path>
        </StackPanel>

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            path.BeginStoryboard((Storyboard)this.Resources["storyBoard"]);
        }

  

时间: 2024-11-19 04:50:52

WPF(Windows10通用应用程序开发) 线性插值动画 or 帧动画学习笔记及实例的相关文章

蓝鸥Unity开发基础——关系运算和逻辑运算学习笔记

蓝鸥Unity开发基础--关系运算和逻辑运算学习笔记 本节内容 关系运算符 逻辑运算符 一.关系运算符 > >= < <= == != 主要用于比较运算,比较的结果只有true或false两种情况,结果用boo类型变量存储 注意:判断是否相等,用==(双等号) 不能用零或非零代表bool值  二.逻辑运算符 逻辑运算符组成的表达式结果也只有ture或false &&(与):运算符两边表达式地值同时为真的时候,整个逻辑表达式的值才为真 ||(或):运算符两边表达式的值

uwp 图片切换动画 使用帧动画

原文:uwp 图片切换动画 使用帧动画 上一篇博客使用了Timer来实现图片的切换,@lindexi_gd讨论了一下性能,我本人其实对性能这一方面不太熟,但我觉得还是有必要考虑一下,那么今天我们使用帧动画开实现以下 新建项目,添加一个Button和Image 在Page里定义资源 <Storyboard x:Key="std" x:Name="std" RepeatBehavior="Forever" AutoReverse="T

微信小程序开发之录音机 音频播放 动画 (真机可用)

趁着周末用微信小程序做了个简易录音机.跟大家分享,欢迎批评! 老规矩,先几张图. 1.为了进来看得清楚.刚开始没有加载音频列表.代码往前挪一挪即可. 2.按住 录音按钮的时候会出现麦克风.中间的麦克风是个帧动画. 其实就是用js控制图片显示隐藏.没啥好说的.这里值得说一说的是录音.微信的录音API后,如果录音时间太短,会录音失败.所以fail的时候还是需要处理一下.录音时间的限制和微信语音是一样的.60秒. 3.我在录音完成后才加载列表. 下图就是从微信存储的文件里获取到的列表信息.有储存路径,

Android笔记(六十三) android中的动画——逐帧动画( frame-by-frame animation)

就好像演电影一样,播放实现准备好的图片,来实现动画效果. 逐帧动画需要用到AnimationDrawable类,该类主要用于创建一个逐帧动画,然后我们把这个动画设置为view的背景即可. android提供两种方法为AnimationDrawable添加帧:XML定义和JAVA代码创建. XML 因为动画帧的资源需要是一个Drawable对象,所以需要把它放到Drawable目录下.在<animation-list>使用<item>来添加一帧 anima.xml <?xml

〖前端开发〗HTML/CSS基础知识学习笔记

经过一天的学习,把慕课网的HTML/CSS基础知识学完了,笔记整理: 1. 文件结构: HTML文件的固定结构: <html> <head>...</head> <body>...</body> </html> html是根标签 head定义文档头部,包含: title, script, style, link, meta body是网页主要内容,包含:h1,h2-h6, p, a, img 2. 认识head标签: <head

PL/SQL之DBMS_SQL程序包使用(1)(学习笔记)

dbms_sql程序包dbms_sql程序包是系统提供给我们的另一种使用动态SQL的方法:使用DBMS_SQL包实现动态的SQL的步骤如下:1.将要执行的SQL语句或者一个语句放到一个字符串变量中2.使用DBMS_SQL包的parse过程来分析该字符串3.使用DBMS_SQL包的bind_varable过程绑定变量4.使用DMBS_SQL包的execute函数和执行语句: 示例1: --使用DBMS_SQL包执行DDL语句 --需求:使用DBMS_SQL包根据用户输入的表名,字段名及字段类型建表

基于vagrant 搭建Ruby开发平台(Ruby及Rails学习笔记第一篇)

开篇我只想吐槽为社么我没有早点了解vagrant呢,这样我就能省那笔买 MacBook Pro 的钱了... "Create and configure lightweight,reproducible and portable development environments."这是Vagrant官网首页的介绍"创建配置轻量级,可重复的,可便携的开发环境." 用这东西感觉很方便,能避免开发环境不一致的问题.特别是团队开发,只需配置好一份开发环境然后分发下去.这样实

黑马程序员——JAVA基础-I/O流学习笔记(一)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 第一次写博文,内心无比激动,成长在此开始! 最近一直在自学java基础,看到I/O流这章了,先写下对I/O流的了解吧! 一.I/O流简介 I/O是实现java编程输入和输出的基础,可以方便的将数据进行输入/输出操作.java把不同的输入/输出源(硬盘.文件.网络连接等)抽象的描述成“流”,由于流的存在,实现了不同输入/输出源之间的交换数据. java中关于流的操作的类都在java.io包中.

视图动画和帧动画

转载请注明出处:http://blog.csdn.net/ZhouLi_CSDN/article/details/45971421 View Animaiton 通常使用xml文件定义动画,这样易读,重用. xml写在res/anim/路径下. 下面是例子: <set android:shareInterpolator="false"> <scale android:interpolator="@android:anim/accelerate_deceler