从Flash到Silverlight进阶教程-Tweener

2018-02-28 18:46:55 浏览数 (1)

从Flash到Silverlight进阶教程

Tweener

在flash中有一个Tweener类,通过这个类我们可以通过代码来创建一些动画效果,这里将要介绍一下在Silverlight中如何像在flash中运用Tweener类一样来创建动画效果。

例子中使用的Flash Tweener类为:http://code.google.com/p/tweener/

代码语言:javascript复制
package {
        import caurina.transitions.Tweener;
        
        import flash.display.MovieClip;
        import flash.events.MouseEvent;
        
        public class Lession02a extends MovieClip
        {
            private var ol:OL;
            
            public function Lession02a()
            {
                this.ol = this.getChildByName("mol") as OL;
                this.ol.addEventListener(MouseEvent.MOUSE_OVER,onMOUSE_OVER);
                this.ol.addEventListener(MouseEvent.MOUSE_OUT,onMOUSE_OUT);
            }
            
            private function onMOUSE_OVER(e:MouseEvent):void{
                Tweener.addTween(this.ol, {scaleX:1.2, scaleY:1.2, alpha:0.2, time:0.5, transition:"easeinoutback"});
            }
            
            private function onMOUSE_OUT(e:MouseEvent):void{
                Tweener.addTween(this.ol, {scaleX:1, scaleY:1, alpha:1, time:0.5, transition:"easeinoutback"});
            }
        }
    }
代码语言:javascript复制
package
    {
        import flash.display.MovieClip;
    
        public class OL extends MovieClip
        {
            public function OL()
            {
                super();
            }
            
        }
    }

了解flash中Tween类的朋友我就不用多说,只要用上一次便会爱上她。flash中的Tween已经发展了很长的时间,功能也非常的强大,可以用来做很多很玄的效果。这么好的东西在Silverlight中当然也会有的,其名字为:agTweener    项目地址:www.codeplex.com/agTweener/    当然了他还刚刚开始远没有flash中的强大。

看看要实现同样的效果在Silverlight中该怎么样做。

新建项目,参考Silverlight初级教程-建立silverlight项目 。

调整舞台布局和Flash一样,参考Silverlight初级教程-绘图布局 。

在flash中引用了Tweener类库

import caurina.transitions.Tweener;

在Silverlight中也是一样,需要引用Tweener类库。右键点击新建立的解决方案选择Add->Existing Project 选中刚才下载agTweener项目

右键点击Silverlight项目选择Add Reference

在弹出的对话框中选择Project选项卡,选中agTweener项目

好准备工作做好了。

制作一个自定义用户控件,注意目录结构的排放。参考从Flash到Silverlight进阶教程-用代码来创建动画中的用Blend设计UI这一节。

打开Page.xaml.cs

这里说明下"LayoutRoot"为silverlight默认的根容器,这个名字一般不会去改动他。

修改page类为如下代码。

代码语言:javascript复制
using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using Lession02b.Components;
    using agTweener;
    
    namespace Lession02b
    {
        public partial class Page : UserControl
        {
            private OL ol;
    
            public Page()
            {
                InitializeComponent();
    
                Init();
            }
    
            private void Init()
            {
                ol = new OL();
                ol.SetValue(Canvas.TopProperty, (double)150);
                ol.SetValue(Canvas.LeftProperty, (double)200);
    
                LayoutRoot.Children.Add(ol);
                TransformGroup _TransformGroup = new TransformGroup();
                ScaleTransform _ScaleTransform = new ScaleTransform();
                SkewTransform _SkewTransform = new SkewTransform();
                RotateTransform _RotateTransform = new RotateTransform();
                TranslateTransform _TranslateTransform = new TranslateTransform();
                _TransformGroup.Children.Add(_ScaleTransform);
                _TransformGroup.Children.Add(_SkewTransform);
                _TransformGroup.Children.Add(_RotateTransform);
                _TransformGroup.Children.Add(_TranslateTransform);
                ol.RenderTransform = _TransformGroup;
    
                ol.MouseEnter  = new MouseEventHandler(ol_MouseEnter);
                ol.MouseLeave  = new MouseEventHandler(ol_MouseLeave);
            }
    
            void ol_MouseEnter(object sender, MouseEventArgs e)
            {
                TweenParameter _tween = new TweenParameter();
                _tween.Opacity = .2;
                _tween.ScaleX = 1.2;
                _tween.ScaleY = 1.2;
                _tween.time = 0.5;
                _tween.transition = TransitionType.easeInOutBack;
                Tweener.addTween(sender as OL, _tween);
            }
    
            void ol_MouseLeave(object sender, MouseEventArgs e)
            {
                TweenParameter _tween = new TweenParameter();
                _tween.Opacity = 1;
                _tween.ScaleX = 1;
                _tween.ScaleY = 1;
                _tween.time = 0.5;
                _tween.transition = TransitionType.easeInOutBack;
                Tweener.addTween(ol, _tween);
            }
        }
    }

效果如下:

代码下载

0 人点赞