基础知识

(一)动画:是快速播放一系列图像(其中每个图像与下一个图像略微不同)给人造成的一种幻觉

(二)动画类型:两类    (1)From/To/By动画:在起始值和结束值之间进行动画处理。      (2)关键帧动画:在使用关键帧对象指定的一系列值之间播放动画

(三) 动画是时间线:所有动画均继承自 Timeline 对象,因此所有动画都是专用类型的时间线.有以下重要属性:

(1)TargetName:指定要进行动画处理的对象    
    (2)TargetProperty:指定要进行动画处理的属性    
    (3)Duration:(时间线)整个动画单次播放持续的时间(格式为 小时 : 分钟 : 秒 或者Forever 或者 Automatic)    
    (4)AutoReverse:指定时间线在到达其 Duration 的终点后是否倒退(True/Flase)     
    (5)RepeatBehavior:获取或设置此时间线的重复行为(RepeatBehavior 可以定义为时间跨度字符串、#x 字符串或者特殊值 Forever)。 
    (6)FillBehavior: 属性指定时间线结束时的行为方式( HoldEnd和Stop) ,默认HoldEnd.如果想保持结束后的状态HoldEnd,否则Stop     
    (7) BeginTime: 属性可以指定动画对象活动开始点的时间

 <UserControl x:Class="AnimationStudy.MainPage"
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"
mc:Ignorable="d"
d:DesignHeight="" d:DesignWidth="">
<StackPanel>
<StackPanel.Resources>
<!-- 矩形透明度动画 -->
<Storyboard x:Name="myStoryboard">
<!--
()TargetName:指定要进行动画处理的对象
()TargetProperty:指定要进行动画处理的属性
()Duration:(时间线)整个动画单次播放持续的时间(格式为 小时 : 分钟 : 秒 或者Forever 或者 Automatic)
()AutoReverse:指定时间线在到达其 Duration 的终点后是否倒退(True/Flase)
()RepeatBehavior:获取或设置此时间线的重复行为(RepeatBehavior 可以定义为时间跨度字符串、#x 字符串或者特殊值 Forever)。
()FillBehavior: 属性指定时间线结束时的行为方式( HoldEnd和Stop) ,默认HoldEnd.如果想保持结束后的状态HoldEnd,否则Stop
() BeginTime: 属性可以指定动画对象活动开始点的时间
-->
<DoubleAnimation Storyboard.TargetName="MyAnimatedRectangle"
Storyboard.TargetProperty="Opacity" BeginTime="0:0:2"
From="1.0" To="0.0" Duration="0:0:1"
AutoReverse="False"
RepeatBehavior="1x" FillBehavior="HoldEnd" />
</Storyboard>
</StackPanel.Resources> <TextBlock Margin="">点击矩形开始动画</TextBlock>
<Rectangle MouseLeftButtonDown="Mouse_Clicked"
x:Name="MyAnimatedRectangle"
Width=""
Height=""
Fill="Blue" />
</StackPanel>
</UserControl>

(四) 对属性应用动画

 <UserControl x:Class="AnimationStudy.AnimationByProperty"
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"
mc:Ignorable="d"
d:DesignHeight="" d:DesignWidth="">
<!--对属性应用动画
()间接以属性作为目标
正在进行动画处理的属性值 (Color) 属于未命名甚至未显式声明的 SolidColorBrush 对象
Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"
()直接属性目标
显式创建 SolidColorBrush,对其进行命名,然后直接以其 Color 属性为目标
-->
<StackPanel x:Name="myStackPanel" Background="Red" Loaded="Start_Animation">
<StackPanel.Resources>
<Storyboard x:Name="colorStoryboard">
<ColorAnimation
BeginTime="00:00:00"
Storyboard.TargetName="myStackPanel"
Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"
From="Red" To="Green" Duration="0:0:4" />
</Storyboard>
</StackPanel.Resources>
</StackPanel>
<!--<StackPanel Loaded="Start_Animation">
<StackPanel.Resources>
<Storyboard x:Name="colorStoryboard">
<ColorAnimation BeginTime="00:00:00" Storyboard.TargetName="mySolidColorBrush"
Storyboard.TargetProperty="Color" From="Red" To="Green" Duration="0:0:4" />
</Storyboard>
</StackPanel.Resources>
<StackPanel.Background>
<SolidColorBrush x:Name="mySolidColorBrush" Color="Red" />
</StackPanel.Background>
</StackPanel>-->
</UserControl>

(五)在程序代码中创建动画,改写(三)中Xaml为程序代码

 //在程序代码中创建动画
private void button1_Click(object sender, RoutedEventArgs e)
{
//创建矩形
Rectangle myRectangle = new Rectangle();
myRectangle.Width = ;
myRectangle.Height = ;
Color myClolor = Color.FromArgb(, , , );
SolidColorBrush myBrush = new SolidColorBrush();
myBrush.Color = myClolor;
myRectangle.Fill = myBrush;
LayoutRoot.Children.Add(myRectangle);
//2秒中的时间线
Duration duration = new Duration(TimeSpan.FromSeconds()); // 创建DoubleAnimation动画
DoubleAnimation myDoubleAnimation = new DoubleAnimation();
myDoubleAnimation.Duration = duration;
//创建演示图版.并将myDoubleAnimation动画加到演示图板
Storyboard sb = new Storyboard();
sb.Duration = duration;
sb.Children.Add(myDoubleAnimation); //设置动画对象和动画属性
Storyboard.SetTarget(myDoubleAnimation, myRectangle);
Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath(OpacityProperty));
myDoubleAnimation.To =0.0;
sb.BeginTime = new TimeSpan(, , , );
sb.RepeatBehavior = new RepeatBehavior();
myDoubleAnimation.AutoReverse = false;
myDoubleAnimation.FillBehavior = FillBehavior.HoldEnd;
//以资源文件加入到LayOutRoot
LayoutRoot.Resources.Add("",sb);
//开始动画
sb.Begin(); }

(一)关键帧动画:动画形式显示了目标属性的值,单个关键帧动画可以创建任意数量的目标值之间的过渡.

(二)关键帧动画的优点:

(1)使用关键帧对象描述关键帧动画的目标值

(2)单个关键帧动画可以创建任意数量的目标值之间的过渡

(3)某些关键帧方法除支持多个目标值外,还支持多个内插方法

(三)内插方法:定义了从某个值过渡到下一个值的方式

(1)离散

(2)线性

(3)样条

(四)创建关键帧动画

(1)步骤:

a、 按照对 From/To/By 动画使用的方法声明动画并指定其 Duration。

b、  对于每一个目标值,创建相应类型的关键帧,设置其值和 KeyTime,并将其添加到动画的 KeyFrames 集合内。

c、 按照对 From/To/By 动画使用的方法,将动画与属性相关联。

(2)实例讲解:

 <UserControl x:Class="AnimationStudy.AnimationUsingKeyFrames"
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"
mc:Ignorable="d"
d:DesignHeight="" d:DesignWidth=""> <Canvas>
<Canvas.Resources>
<Storyboard x:Name="myStoryboard">
<!--
(一)目标值(关键帧)和关键时间
Value(目标值/关键帧): 指定关键帧的目标值
KeyTime(关键时间): 属性指定到达关键帧的 Value 的时间(在动画的 Duration 之内)
(二)关键帧的类型
_interpolationMethod(内插方法)_type(处理得值类型) KeyFrame
(三)内插方法:
()线性(Linear)内插:动画将以段持续期间内的固定速度来播放。
()离散(Discrete)内插:动画函数将从一个值跳到下一个没有内插的值
()样条(Spline)内插:样条内插可用于达到更现实的计时效果
(四)样条内插中的KeySpline
()KeySpline作用:获取或设置用于定义此关键帧的动画进度的两个控制点。
()应用:KeySpline 来模拟下落的水滴或跳动的球等物体的物理轨迹。
a)"渐入"和"渐出"效果应用于动画。
b) 对于用户交互效果,例如背景淡入/淡出或控制按钮弹跳等
c)以便按照特定的方式来提高或降低动画的更改速率
()在该列中SplineDoubleKeyFrame KeySpline="0.6,0.0 0.9,0.00",这里的两个控制点为
(0.6,0.0)和(0.9,0.00)两个控制点
(五)组合内插方法:可以在单个关键帧动画中使用具有不同内插类型的关键帧(将以几个内插方法【线性、离散、样条】组合起来)
(六)缓动函数:以将自定义算术公式应用于动画。
-->
<DoubleAnimationUsingKeyFrames
Storyboard.TargetName="MyAnimatedTranslateTransform"
Storyboard.TargetProperty="X"
Duration="0:0:10">
<LinearDoubleKeyFrame Value="" KeyTime="0:0:3" />
<DiscreteDoubleKeyFrame Value="" KeyTime="0:0:4" />
<SplineDoubleKeyFrame KeySpline="0.6,0.0 0.9,0.00" Value="" KeyTime="0:0:6" />
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Canvas.Resources>
<Rectangle MouseLeftButtonDown="Mouse_Clicked" Fill="Blue" Width="" Height="">
<Rectangle.RenderTransform>
<TranslateTransform x:Name="MyAnimatedTranslateTransform" X="" Y="" />
</Rectangle.RenderTransform>
</Rectangle>
</Canvas>
</UserControl>

文章转自:http://www.cnblogs.com/Joetao/articles/2054005.html

Silverlight动画的基本知识、关键帧动画的更多相关文章

  1. Core Animation 动画的使用:关键帧动画、基础动画、动画组

    首先让我们了解下什么是 Core Animation,Core Animation 为核心动画,他为图形渲染和动画提供了基础.使用核心动画,我们只需要设置起点.终点.关键帧等一些参数,剩下的工作核心动 ...

  2. WPF中的动画——(五)关键帧动画

    与 From/To/By 动画类似,关键帧动画以也可以以动画形式显示目标属性值. 和From/To/By 动画不同的是, From/To/By 动画只能控制在两个状态之间变化,而关键帧动画则可以在多个 ...

  3. iOS block-base 动画简单用法+关键帧动画设置线性变化速度的问题

    本文转载至 http://www.tuicool.com/articles/aANBF3m 时间 2014-12-07 20:13:37  segmentfault-博客原文  http://segm ...

  4. Windows Store App 关键帧动画

    关键帧动画和插值动画类似,同样可以根据目标属性值的变化产生相应的动画效果,不同的是,插值动画是在两个属性值之间进行渐变,而关键帧动画打破了仅通过两个属性值控制动画的局限性,它可以在任意多个属性值之间进 ...

  5. ios基础动画、关键帧动画、动画组、转场动画等

    概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画 ...

  6. 背水一战 Windows 10 (14) - 动画: 线性动画, 关键帧动画

    [源码下载] 背水一战 Windows 10 (14) - 动画: 线性动画, 关键帧动画 作者:webabcd 介绍背水一战 Windows 10 之 动画 线性动画 - ColorAnimatio ...

  7. 核心动画基础动画(CABasicAnimation)关键帧动画

    1.在iOS中核心动画分为几类: 基础动画(CABasicAnimation) 关键帧动画(CAKeyframeAnimation) 动画组(CAAnimationGroup) 转场动画(CATran ...

  8. 【WPF学习】第五十四章 关键帧动画

    到目前为止,看到的所有动画都使用线性插值从起点到终点.但如果需要创建具有多个分段的动画和不规则移动的动画.例如,可能希望创建一个动画,快速地将一个元素滑入到视图中,然后慢慢地将它移到正确位置.可通过创 ...

  9. Windows Phone开发(39):漫谈关键帧动画上篇

    原文:Windows Phone开发(39):漫谈关键帧动画上篇 尽管前面介绍的几种动画会让觉得很好玩了,但是,不知道你是否发现,在前面说到的一系列XXXAnimation中,都有一个共同点,那就是仅 ...

随机推荐

  1. Win Mingw-64获取

    首先得了解下三种异常不同实现: SJLJ: slower but available for every architecture. SEH: fastest but limited to 64-bi ...

  2. openlayers加载百度地图

    最近在做openlayers添加百度地图的扩展类,经过轮番的尝试,终于将其接入了,但是发现偏差比较大,有根据百度的坐标进行了比对,将切片原点进行了调整,发现OK了.打开百度地图,可以看出切片的路径如: ...

  3. 【Mood-12】Android开发相关书籍推荐

    新年伊始,找到Android进阶干货若干,2015拜读. 1.Android应用UI设计模式 目前,谷歌Android操作系统在移动市场中风头正劲,并且未来发展势不可挡.<Android应用UI ...

  4. 用英文加优先级来解读C的声明

    比如:int ( * func_p ) ( double ); 首先着眼于标识符. func_p is 因为存在括号,(* func_p) 先被处理,这里着眼于* func_p is a pointe ...

  5. iOS 关于NSString的一些方法

    在项目中整理的一些关于字符串应用方法,可以全部封装在一个类里面进行调用,会不断更新添加: 1.数字转换成对应的中文数字(项目中课程分级目录的章节号用到) 摘自:http://blog.csdn.net ...

  6. 段描述符表(GDT+LDT)的有感

    [0]写在前面 要知道,在汇编中,代码的装入顺序决定了在内存中的地址位置.所有的代码或者数据都在硬盘上,当调试或者启动的时候,加载到内存:当需要对数据进行处理的时候,我们通过将数据从内存载入到regi ...

  7. 剑指Offer17 二叉树的镜像

    /************************************************************************* > File Name: 17_Mirror ...

  8. 读取iPhone中的通讯录信息

    添加AddressBook这个包:然后#import <AddressBook/AddressBook.h> //取得本地通信录名柄 ABAddressBookRef addressBoo ...

  9. 浅谈实现placeholder效果的几种方案

    placeholder是html5<input>的一个属性,它提供可描述输入字段预期值的提示信息(hint), 该提示会在输入字段为空时显示.高端浏览器支持此属性(ie10/11在获得焦点 ...

  10. 初识--Ajax & Json

    1,AJAX是一种进行页面局部异步刷新技术. 用AJAX向服务器发送请求和获得服务器返回的数据并更新到页面中. 不是刷新整个页面,而是在HTML页面中使用JavaScript创建XMLHTTPRequ ...