在Silverlight的动画框架中,ScaleTransform类提供了在二维空间中的坐标内进行缩放操作,通过ScaleTransform可以在水平或垂直方向的缩放和拉伸对象,以实现一个简单的缩放动画效果,故此我将其称为缩放动画(ScaleTransform)。使用ScaleTransform需要特别关注的有两点:中心点坐标和X、Y轴方向的缩放比例,比例值越小则对象元素就越小(既收缩),比例值越大则对象元素就越大(既呈现为放大效果)。

        

        

  Blend对Silverlight里的动画设计支持非常强大,同偏移动画、旋转动画一样简单,要实现缩放动画也只需要对设计好的动画元素进行简单的设计就能完成动画效果的创建。

        

  通过创建动画容器时间线后,如上图进行动画效果属性的设置,Blend便会生成相应的动画编码在XAML文件里,详见如下代码块:


<Storyboard x:Name="Storyboard1">    
     <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="truck"          
      Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">         
        <EasingDoubleKeyFrame KeyTime="00:00:03" Value="0.15"/>     
    </DoubleAnimationUsingKeyFrames>     
    <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="truck"          
      Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)">         
      <EasingDoubleKeyFrame KeyTime="00:00:03" Value="0.15"/>     
    </DoubleAnimationUsingKeyFrames>
</Storyboard>

       

  任何一个元素对象,其缩放动画(ScaleTransform)的默认值为(1,1),既保持元素原样不变。如前面所说,比例值越小则对象元素就越小(既收缩),比例值越大则对象元素就越大(既呈现为放大效果)。如上示例就是将缩放比例值设置的0.15,其运行效果如下图所示:

      

  如果上图动画效果使用程序编码去实现,同样的也是很简单的,主要就是利用动画根据时间去控制对象的ScaleTransform变换效果的ScaleX和ScaleY值,详细如下:

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->

/// <summary> /// 创建对象truck的缩放动画,3秒钟从原始大小缩放到15%的大小

/// </summary>

     public void CreateStoryboard()

    {

      //创建动画容器时间线     Storyboard storyboard = new Storyboard();

     //创建X轴方向的缩放动画,设置对象缩放到0.15,置对象缩放缓存时间为3秒     DoubleAnimation doubleAnimation = new DoubleAnimation();

    doubleAnimation.To = 0.15;     doubleAnimation.Duration = new Duration(new TimeSpan(0, 0, 3));

    Storyboard.SetTarget(doubleAnimation, truck);     Storyboard.SetTargetProperty(doubleAnimation,         new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"));

     storyboard.Children.Add(doubleAnimation);

  如上示例,如果将移动的对象换成一个“车”,执行动画的时候就感觉是一辆车在马路上行驶了。缩放动画(ScaleTransform)在平时的开发中非常适用,不如界面上有一个组件,默认为缩放一半显示,当用户的鼠标指向它的时候将对象放大到正常比例(x,y=>1,1)显示,鼠标离开的时候将对象恢复到默认大小(x,y=>0.5,0.5),此时就可以使用缩放动画(ScaleTransform)去实现。


<Ellipse Width="50" Height="50" Fill="Red" x:Name="ellipse" RenderTransformOrigin="0.5,0.5">   
    <Ellipse.RenderTransform>         
      <TransformGroup>             
        <ScaleTransform ScaleX="0.5" ScaleY="0.5"/>             
          <SkewTransform/>             
            <RotateTransform/>             
        <TranslateTransform/>         
      </TransformGroup>     
    </Ellipse.RenderTransform>
</Ellipse>
  ellipse.MouseEnter += (mes, mee) =>    
{        
    Storyboard storyboard = new Storyboard();        
    DoubleAnimation doubleAnimation = new DoubleAnimation();        
    doubleAnimation.To = 1;        
    doubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(300));        
    Storyboard.SetTarget(doubleAnimation, ellipse);        
    Storyboard.SetTargetProperty(doubleAnimation,            
    new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"));        
    storyboard.Children.Add(doubleAnimation);
       doubleAnimation = new DoubleAnimation();        
     doubleAnimation.To = 1;        
    doubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(300));        
    Storyboard.SetTarget(doubleAnimation, ellipse);        
    Storyboard.SetTargetProperty(doubleAnimation,             new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"));        
    storyboard.Children.Add(doubleAnimation);
       storyboard.Begin();    
};
ellipse.MouseLeave += (mls, mle) =>    
{        
    Storyboard storyboard = new Storyboard();        
    DoubleAnimation doubleAnimation = new DoubleAnimation();        
    doubleAnimation.To = 0.5;        
    doubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(300));        
    Storyboard.SetTarget(doubleAnimation, ellipse);        
    Storyboard.SetTargetProperty(doubleAnimation,             new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)"));        
    storyboard.Children.Add(doubleAnimation);
        doubleAnimation = new DoubleAnimation();         doubleAnimation.To = 0.5;        
    doubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(300));        
    Storyboard.SetTarget(doubleAnimation, ellipse);        
    Storyboard.SetTargetProperty(doubleAnimation,             new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"));        
    storyboard.Children.Add(doubleAnimation);
       storyboard.Begin();    
};
 

//创建Y轴方向的缩放动画,设置对象缩放到0.15,置对象缩放缓存时间为3秒

   doubleAnimation = new DoubleAnimation();

  doubleAnimation.SetValue(DoubleAnimation.ToProperty, 0.15);

  doubleAnimation.SetValue(DoubleAnimation.DurationProperty, new Duration(new TimeSpan(0, 0, 3)));

   Storyboard.SetTarget(doubleAnimation, truck);

  Storyboard.SetTargetProperty(doubleAnimation,         new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)"));

   storyboard.Children.Add(doubleAnimation);

storyboard.Begin();

}

  PS:上面代码块仅是为了掩饰缩放动画(ScaleTransform)的使用,如果真要实现圆形对象的鼠标指向放大,移开恢复原状的效果只需要直接设置其宽度(Width)和高度(Height)属性就可以了。

        

缩放动画(ScaleTransform)的更多相关文章

  1. Silverlight & Blend动画设计系列三:缩放动画(ScaleTransform)

    在Silverlight的动画框架中,ScaleTransform类提供了在二维空间中的坐标内进行缩放操作,通过ScaleTransform可以在水平或垂直方向的缩放和拉伸对象,以实现一个简单的缩放动 ...

  2. Android实现Layout缩放动画

    最近看到Any.do的缩放效果很酷,看到一篇讲Layout缩放动画实现的文章,记录一下: http://edison-cool911.iteye.com/blog/704812

  3. 动画--问题追踪:ImageView执行缩放动画ScaleAnimation之后,图像显示不全的问题。

    http://www.bkjia.com/Androidjc/929473.html: 问题追踪:ImageView执行缩放动画ScaleAnimation之后,图像显示不全的问题., 问题:我有一个 ...

  4. iOS开发笔记10:圆点缩放动画、强制更新、远程推送加语音提醒及UIView截屏

    1.使用CAReplicatorLayer制作等待动画 CALayer+CABasicAnimation可以制作很多简单的动画效果,之前的博客中介绍的“两个动画”,一个是利用一张渐变色图片+CABas ...

  5. AndroidUI 视图动画-缩放动画效果 (ScaleAnimation)

    放动画效果,可以使用ScaleAnimation: <Button android:id="@+id/btnScale2" android:layout_width=&quo ...

  6. AndroidTv Home界面实现原理(二)——Leanback 库的主页卡位缩放动画源码解析

    先看个效果图: 上一篇中,我们留了问题,在 Tv Home 界面这种很常见聚焦卡位放大动画效果,我们这一篇就来看看 Leanback 库是怎么实现的. 如果要我们自己实现的话,思路应该不难,就是写个放 ...

  7. Android缩放动画

    Android缩放动画 核心方法 public void startAnimation(Animation animation) 执行动画,参数可以是各种动画的对象,Animation的多态,也可以是 ...

  8. UI设计篇·入门篇·简单动画的实现,透明动画/旋转动画/移动动画/缩放动画,混合动画效果的实现,为动画设置监听事件,自定义动画的方法

    基本的动画构成共有四种:透明动画/旋转动画/移动动画/缩放动画. 配置动画的方式有两种,一种是直接使用代码来配置动画效果,另一种是使用xml文档配置动画效果 相比而言,用xml文档写出来的动画效果,写 ...

  9. 简单的CSS圆形缩放动画

    简单的CSS圆形缩放动画 话不多说鼠标移动上去,看效果吧,效果预览 代码如下: <!DOCTYPE html> <html> <head> <title> ...

随机推荐

  1. CISCO实验记录八:ACL访问控制

    1.使用ACL实现免ping #access-list 100 deny icmp 192.168.0.1 0.0.0.0 192.168.1.2 0.0.0.0 #access-list 100 p ...

  2. JMeter压力测试及并发量计算-2

    一个每天1000万PV的网站需要什么样的性能去支撑呢?继续上一篇,下面我们就来计算一下,前面我们已经搞到了一票数据,但是这些数据的意义还没有说.技术是为业务服务的,下面就来说说怎么让些数据变得有意义. ...

  3. Python Docstring 风格和写法学习

    什么是Python Docstring 和Java类似,Python也通过注释形式的Docstring给程序.类.函数等建立文档.通过Docstring建立的文档不仅对人来说有更好的可读性,也能够让I ...

  4. java中 label 配合 break continue 使用方法

    转 https://www.jianshu.com/p/7954b61bc6ee java中 label 配合 break continue 使用的其实是比较少的. 这种做法在业务代码中比较少见. 在 ...

  5. Swift 构造过程

    构造过程是为了使用某个类.结构体或枚举类型的实例而进行的准备过程.这个过程包含了为实例中的每个属性设置初始值和为其执行必要的准备和初始化任务. Swift 构造函数使用 init() 方法. 与 Ob ...

  6. android ONVIF 组播探测在线摄像机

    http://blog.csdn.net/ghostyu/article/details/8182516 Android的Wifi,默认情况下是不接受组播的,见:http://developer.an ...

  7. Oracle11g安装与卸载教程

    1.1,前言: 电脑太卡,鄙人穷屌丝啊,没钱买新电脑,想想周六日还要耍游戏就给电脑重做了个系统,糟糕的是电脑上的各种环境,工具都需要重新装一边,包括oracle数据库- -,依稀记得昨天装了一上午的数 ...

  8. 【论文笔记】DeepOrigin: End-to-End Deep Learning for Detection of New Malware Families

    DeepOrigin: End-to-End Deep Learning for Detection of New Malware Families 标签(空格分隔): 论文 论文基本信息 会议: I ...

  9. JAVA 基础编程练习题43 【程序 43 求奇数个数】

    43 [程序 43 求奇数个数] 题目:求 0—7 所能组成的奇数个数. package cskaoyan; public class cskaoyan43 { @org.junit.Test pub ...

  10. 动手生成 Delphi xe DBTreeview 三级行政图树 省市县

    表结构及记录 object tarea: TFDQuery    Connection = FDConnection1    SQL.Strings = (      'select *'      ...