Windows Phone开发(40):漫谈关键帧动画之中篇

原文:Windows Phone开发(40):漫谈关键帧动画之中篇

一、DiscreteDoubleKeyFrame

离散型关键帧动画,重点,我们理解一下“离散”的意思,其实你查一下《新华字典》,“离”和“散”的意思相近。我们可以这样解释:每个关键帧之间是直接过渡,其间不经过动画插补。似乎这样理解有点苦涩难懂,所以,我们还是从实例入手。

请参考以下XAML代码写一个示例:

    <Grid Loaded="OnGridLoaded">
        <Rectangle Width="100" Height="100" Fill="Green" VerticalAlignment="Top">
            <Rectangle.RenderTransform>
                <TranslateTransform x:Name="trm"/>
            </Rectangle.RenderTransform>
        </Rectangle>
        <Grid.Resources>
            <Storyboard x:Name="std">
                <DoubleAnimationUsingKeyFrames Duration="0:0:5" RepeatBehavior="15"
                                               Storyboard.TargetName="trm"
                                               Storyboard.TargetProperty="Y">
                    <DiscreteDoubleKeyFrame KeyTime="0:0:2" Value="150"/>
                    <DiscreteDoubleKeyFrame KeyTime="0:0:3" Value="280"/>
                    <DiscreteDoubleKeyFrame KeyTime="0:0:5" Value="380"/>
                </DoubleAnimationUsingKeyFrames>
            </Storyboard>
        </Grid.Resources>
    </Grid>

在后台的C#代码中,千万不要记了启动动画,等下运行后发现动不了就麻烦了。

        private void OnGridLoaded(object sender, RoutedEventArgs e)
        {
            this.std.Begin();
        }

 然后你可以运行了,注意认真观察动画的演变过程。

 

不知道你观察到了什么?你是否发现,矩形向下运动的过程是直接跳跃式的,每个关键之间没有创建过渡效果,而且直接跳到对应值。

 

 

二、DiscreteColorKeyFrame

这也是一个离散型关键帧动画,从名字上我们知道,它是针对颜色进行动画处理的。还是看例子吧。

请参考下面XAML代码写一个测试程序:

    <Grid Loaded="OnGridLoaded">
        <Ellipse Width="250" Height="250">
            <Ellipse.Fill>
                <SolidColorBrush x:Name="brush" Color="Blue"/>
            </Ellipse.Fill>
        </Ellipse>
        <Grid.Resources>
            <Storyboard x:Name="std">
                <ColorAnimationUsingKeyFrames Duration="0:0:8"
                                              RepeatBehavior="20"
                                              Storyboard.TargetName="brush"
                                              Storyboard.TargetProperty="Color">
                    <DiscreteColorKeyFrame KeyTime="0:0:2" Value="Yellow"/>
                    <DiscreteColorKeyFrame KeyTime="0:0:5" Value="Gray"/>
                    <DiscreteColorKeyFrame KeyTime="0:0:7" Value="Red"/>
                </ColorAnimationUsingKeyFrames>
            </Storyboard>
        </Grid.Resources>
    </Grid>

后台代码就不帖了,都懂得写什么了。

然后运行一下,查看效果。

 

从效果中可以看到,颜色的改变是没有平滑的过渡效果的,而是当时间线的播放时间到了关键帧所在的位置时,颜色是直接改变的。

 

 

三、LinearColorKeyFrame

线性颜色的关键帧与离散型动画相反,每个关键帧之间都创建平滑的过渡效果,让人看起来有连续感。

请参考以下XAML代码写一个测试程序。

    <Grid Loaded="onGridLoaded">
        <Ellipse Width="300" Height="300" >
            <Ellipse.Fill>
                <RadialGradientBrush x:Name="rdGradientBrush" Center="0.5, 0.5"
                                     RadiusX="0.5" RadiusY="0.5">
                    <GradientStop Color="LightGreen" Offset="0"/>
                    <GradientStop Color="DarkGreen" Offset="1"/>
                </RadialGradientBrush>
            </Ellipse.Fill>
        </Ellipse>
        <Grid.Resources>
            <Storyboard x:Name="std">
                <ColorAnimationUsingKeyFrames Duration="0:0:6"
                                              RepeatBehavior="Forever"
                                              Storyboard.TargetName="rdGradientBrush"
                                              Storyboard.TargetProperty="(RadialGradientBrush.GradientStops)[0].(GradientStop.Color)">
                    <LinearColorKeyFrame KeyTime="0:0:1" Value="Orange"/>
                    <LinearColorKeyFrame KeyTime="0:0:3" Value="White"/>
                    <LinearColorKeyFrame KeyTime="0:0:6" Value="Pink"/>
                </ColorAnimationUsingKeyFrames>
                <ColorAnimationUsingKeyFrames Duration="0:0:6"
                                              RepeatBehavior="Forever"
                                              Storyboard.TargetName="rdGradientBrush"
                                              Storyboard.TargetProperty="(RadialGradientBrush.GradientStops)[1].(GradientStop.Color)">
                    <LinearColorKeyFrame KeyTime="0:0:3" Value="Yellow"/>
                    <LinearColorKeyFrame KeyTime="0:0:6" Value="Violet"/>
                    <LinearColorKeyFrame KeyTime="0:0:7" Value="SeaGreen"/>
                </ColorAnimationUsingKeyFrames>
            </Storyboard>
        </Grid.Resources>
    </Grid>

页面上的正圆是使用径向渐变填充的,渐变颜色点有两个,我们分别对这两个渐变点的颜色进行线性动画处理,这样就会做出很漂亮的效果,如下面图片所示。

       
  

时间: 2024-09-17 12:45:05

Windows Phone开发(40):漫谈关键帧动画之中篇的相关文章

Windows Phone开发(41):漫谈关键帧动画之下篇

原文:Windows Phone开发(41):漫谈关键帧动画之下篇 也许大家已经发现,其实不管什么类型的动画,使用方法基本是一样的,不知道大家总结出规律了没有?当你找到规律之后,你会发现真的可以举一反六的,不骗你. 为了能帮助大家找到规律,今天,我们再来写两个例子.   一.DiscreteObjectKeyFrame 简单介绍一下这个吧,它只是为了方便我们进行一些大的切换而提供,但它也不是万能的,尽管它的目标类型是object类型,前提是它与其它动画一样,只能针对某对象的某属性进行动画处理.与

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

原文:Windows Phone开发(39):漫谈关键帧动画上篇 尽管前面介绍的几种动画会让觉得很好玩了,但是,不知道你是否发现,在前面说到的一系列XXXAnimation中,都有一个共同点,那就是仅仅针对两个值的目标值之间产生动画,如果使用By,将在原值和加上By后的目标值之间进行动画处理:如果使用From,To,那就更好理解了,就是首尾两个值之间值的动画. 那么,如果我希望三个值呢?或者N多个值呢?每个值之间的时间间隔不一样呢?如果我还希望更复杂的动画效果呢?比如可以附加缓动函数的.显然,前

Windows Phone开发(42):缓动动画

原文:Windows Phone开发(42):缓动动画 前面在讨论关键帧动画的时候,我有意把几个带缓动动画的关键帧动画忽略掉,如EasingColorKeyFrame.EasingDoubleKeyFrame和EasingPointKeyFrame,其实为数不多,就这么几个.因为我希统一放到这节课程来吹一下缓动函数. 所谓缓动函数,就是我们在代数里面说的函数,说白了嘛,就是根特定的函数规则,用输入的值算出最终值,使得动画在两个关键帧之间不再是均衡过度,而是带有加/减速或其他效果,当然,还要取决于

Windows 8 Store Apps学习(19) 动画 线性动画, 关键帧动画, 缓动动画

介绍 重新想象 Windows 8 Store Apps 之 动画 线性动画 - 共有 3 种: ColorAnimation, DoubleAnimation, PointAnimation, 它们均继承自 Timeline 关键帧动画 - 共有 4 种:ColorAnimationUsingKeyFrames, DoubleAnimationUsingKeyFrames, PointAnimationUsingKeyFrames, ObjectAnimationUsingKeyFrames

Windows Phone开发(36):动画之DoubleAnimation

原文:Windows Phone开发(36):动画之DoubleAnimation 从本节开始,我们将围绕一个有趣的话题展开讨论--动画. 看到动画一词,你一定想到Flash,毕竟WP应用的一个很重要的框架是Silverlight,在WP中也发挥了Silverlight的许多优点,可能不少人说,Silverlight就是和Flash差不多吧,当你深入了解了Silverlight后,你会发现,其实不然,Silverlight更偏重于数据处和企业级应用.   好了,F话不多说,开始吹我们今天的牛皮吧

iOS开发UI篇—核心动画(关键帧动画)

一.简单介绍 是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值 属性解析: values:就是上述的NSArray对象.里面的元素称为"关键帧"(keyframe).动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧 path:可以

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

原文:背水一战 Windows 10 (14) - 动画: 线性动画, 关键帧动画 [源码下载] 背水一战 Windows 10 (14) - 动画: 线性动画, 关键帧动画 作者:webabcd 介绍背水一战 Windows 10 之 动画 线性动画 - ColorAnimation, DoubleAnimation, PointAnimation 关键帧动画 - ColorAnimationUsingKeyFrames, DoubleAnimationUsingKeyFrames, Poin

重新想象 Windows 8 Store Apps (19) - 动画: 线性动画, 关键帧动画, 缓动动画

原文:重新想象 Windows 8 Store Apps (19) - 动画: 线性动画, 关键帧动画, 缓动动画 [源码下载] 重新想象 Windows 8 Store Apps (19) - 动画: 线性动画, 关键帧动画, 缓动动画 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 动画 线性动画 - 共有 3 种: ColorAnimation, DoubleAnimation, PointAnimation, 它们均继承自 Timeline 关键帧动画

Windows Phone开发(38):动画之PointAnimation

原文:Windows Phone开发(38):动画之PointAnimation PointAnimation也是很简单的,与前面说到的两个Animation是差不多的,属性也是一样的,如By.From.To,不同的是,PointAnimation是目标值从一点到另一个点. 我有理由相信,大家一定懂的,所以,我不多介绍了,给两个例了热一下身就行了. 例一,让直线动起来. 这个例子,以LineGeometry作为动画的目标对象,通过对StartPoint属性和EndPoint属性进行动画来让直线(