Flex4.0与其Flex3.0相比新增了哪些功能

Flex4 新特性概述

Adobe Flex 最初是由 Macromedia 公司发布的,自 2005 年 10 月 Flex 被 Adobe 以 Flex SDK 2.0 发布之后,Flex SDK 已是一个开源的框架,用于构建富客户端应用程序。开发语言也由 Action Script 2.0 升级为 ActionScript3.0,,并需要 Flash Player 9 以上做为运行时环境。Flex 3 对 Flex 的框架进行了优化,将 Flex 框架集成到了 Flash Player 里,即 runtime share library(RSL),这样就可以将 Flex 框架做为公共类库应用到程序中,减小了程序自身的体积,提高程序的运行效率。

Adobe 于 2009 年发布了 Flex 4 的 bate 版。现在,我们已经可以在 opensource.adobe.com 下载 Flex 4 SDK 的正式版本。与之前版本相比,Flex 4 对外观 (Skin)、效果(effect)、布局 (Layout)、数据绑定等在功能上很大的增强和改进。

Flex 4 提供了多种主题皮肤供用户选择来改变整个项目的主题外观,Skin 的设计也将组件的逻辑元素与可视元素明确的区分开来,引入了新的皮肤和组件架构,被称为 Spark,但是 Flex 4 保留了 Flex3 的命名空间和组件库,所以 Flex4 保持了与 Flex3 的向后兼容。Spark 是以 Flex 3 的 Halo 架构为基础构建的,Spark 扩展了 Halo 的核心基类 UIComponent,所以现有 MX 组件可以与新 Spark 架构组件相互结合应用,彼此也可以轻松实现互操作。

Spark 对于效果(effect)在功能上进行了增强,主要体现在效果应用的对象范围与新特效的增加增强上,Spark 中可以将效果应用在任意的对象和类型上,提升了其灵活性,增强的特效主要表现在:支持过渡自动反向、将 Pixel Bender 过滤器应用为效果 即图片着色的效果 )、在 XYZ 三个平面中变形和基于复杂关键帧的动画。Spark 扩展了布局机制,包含一个非常灵活的布局机制,运行时可指定的布局包含对 2D 旋转和刻度的全面支持,还可以在布局后将 Flash Player 10 新的 3D 功能应用于任何组件。与 Flex 3 相比 Flex 4 最大的不同是 Spark 对 FXG(MXML 图形元素 的支持,FXG 是基于 MXML 标签来定义图形显示组件的,在以前的版本中,如果要在界面显示一个特殊的图形,需用 Action Script 调用 Flex SDK 的绘图 API 来实现,与 Flex3 相比对开发的效率和功能的实现提升不少。

还有一些新功能如对本地文件的操作,变换项目不同的主题皮肤、双向数据绑定等等,这些功能在以前的版本中如果要实现,需要写大量的代码来实现,现在 Flex4 对这些功能全部支持。

回页首

Flex 4 的重要特性及其应用

命名空间的变化

Flex 4 将 Flex 3 中原有的类全部保留了下来,并引入的新的 Spark 类库,Halo 与 Spark 共同享用了大部分的类名称,为了避免 MXML 中出现名称冲突,所以命名空间与之前的版本相比有相应的变化。Flex 4 SDK 有四个命名空间:MXML 2006MXML 2009MX 和 Spark

MXML 2006 命名空间主要应用于 Flex 4 正式版之前的版本,并且 Flex 4 正式版之前的版本也只有 MXML2006 命名空间,该命名空间包含了 Action Script 顶级元素及 MX 包中所有组件类。

其中后面三个命名空间主要作用于 Flex 4 正式版中,它们所代表的内容分别是:

xmlns:fx="http://ns.adobe.com/mxml/2009"

fx 命名空间下包含 Action Script 顶级元素和内建到 MXML 编译器里的标签。

xmlns:mx="library://ns.adobe.com/flex/mx"

mx 命名空间包含着放在 mx.* 包里那些组件,Flex 图表、Flex 数据可视化组件等等。

xmlns:s="library://ns.adobe.com/flex/spark"

命名空间包含所有 Spark 组件,与 MXML 2009 语言命名空间一起使用。命名空间包含 spark.* 和 flashx.* 包中所有核心类。这个命名空间还包含了 19 个 RPC 类,例如我们常用到的 HTTPService 和 RemoteObject 组件,如果需要详细了解 命名空间的具体对象,可以参见您所下载的 Flex 4 SDK 目录 sdks\4.0.0\frameworks 下的 spark-manifest.xml 文件,里面有详细的分类和说明。

新特效与三维支持

Flex 4 中的效果与 Flex 3 相比是一个全新架构的一组特效类,都继承自 Animate 类,Animate 类继承自 Effect 类,Flex 3 中的效果基类 TweenEffect 也是继承自 Effect,所以这两组特效类是一种平行关系,但是 Spark 中的特效对所有对象都有效,包括原有的 Halo 控件 新的 Spark 控件 甚至 graphic 绘制的图像, 所以我们从 Flex 3 向 Flex 4 移植代码时可以保留原有代码不变。

Flex 4 中的特效按其对执行对象的类型不同,可以分为五种。


Flex 4 新特效分类列表

类型

功能描述

Property effects

动态改变一个或多个目标对象的属性 (AnimateFade, Resize, and AnimateColor)

Transform effects

缩入、旋转和位置的改变 .Move, Rotate, and Scale

Pixel-shader effects

主要是针对图片象素着色的动态效果 (CrossFade and Wipe)

Filter effects

过滤器效果(BevelFilterBlurFilter ColorMatrixFilterConvolutionFilterDisplacementMapFilterDropShadowFilterGlowFilterGradientBevelFilterGradientFilterGradientGlowFilterShaderFilter

3D effects

3D 特效(Move3DRotate3DScale3D

3D 特效只能应用于 Spark 组件,因 Spark 组件支持 坐标,支持三维是 Flex 4 的新特性之一。3D 特效是通过改过 x.y,z 的坐标值,实现目标对象远离或靠近的视觉效果,还可以实现让目标对象围绕某个坐标旋转的效果。

我们有时在购物或娱乐型的网站,会看到一些翻页的效果,在以前这类特效一般是由 Flash 制作的,Flex 很难做到。现在 Flex 4 中也提供了类似的特效类来实现翻页的功能。Rotate3D 类可以在三维方向上围绕 x或 轴旋转目标对象。旋转是围绕目标的转换中心发生的。现在一个登录界面为例,让该界面围绕 轴以逆时针的方向旋转,

关键代码:

定义 Rotate3D 对象,设置作用对象及 轴旋转属性值。

 <fx:Declarations> 

 <s:Rotate3D id="rotateEF" target="{loginPanel}" angleXFrom="360" 

 angleXTo="50" duration="3000" repeatCount="1"/> 

 </ fx:Declarations> 

 ...... 

 <mx:LinkButton label="Need to Register?" click="rotateEF.play()"/> 

运行效果:


图 1. 登录窗口
 

图 2. 绕 轴旋转 50 度后界面效果 :


Figure xxx. Requires a heading
 

布局模型

在 Flex 3 中我们常用到的容器布局组件有 CanvasHBoxVBoxTile 等等,每一种对应一种排列子组件布局的样式,如 Canvas 只支持绝对定义,HBox 只支持横向排列子组件,VBox 只支持竖向排列子组件,Tile 平铺子组件可自动换行显示,很明然这些容器布局的实现算法与容器是绑定在一起的,重用性较差,而且这些重量级的容器组件大量使用后会导致最终生成的 SWF 体积非常大,不利于 WEB 界面显示,所以官方建议尽量用 Canvas 布局,少用或不用其它容器组件。在 Flex 4 中,布局的实现算法与容器完全分离。

Spark 布局算法的类型分为四种:BasicLayout( 绝对定位布局 默认),HorizontalLayout( 水平布局 )VerticalLayout( 垂直布局 ),和 TileLayout( 格子布局方式 新增 ),并且开发人员可以自定义布局。常见的容器有:Group、DataGroup、SkinnableContainer、SkinnableDataContainer、orderContainer 和 Panel,容器与布局组件可任意组合使用,这样布局的实现算法可以得到重用,与 Flex 3 相比,布局模型从继承父容器到组合使用容器得到了彻底的转变。Spark 容器组件对数据的支持也有功能上的增强,Flex 3 中容器中只能包含可视化的组件,Spark 在此基础上也支持基本的数据类型,如果 StringNumberArray 等等。

现在以一个登录表单页面来了解 Flex 4 的页面布局机制。


Flex 4 示例关键代码 :

              

 <s:Panel width="312" y="34" x="87" height="206" dropShadowVisible="true" 

 chromeColor="#B0BDC4" title="Login" cornerRadius="6" 

 backgroundColor="#B0BDC4"> 

 <mx:Form horizontalCenter="-1" top="10" backgroundAlpha="1" 

 borderColor="#FEF8F8" borderStyle="outset" backgroundColor="#FFFFFF" 

 width="289" height="118"> 

 <mx:FormItem label="UserName:" backgroundAlpha="0"> 

 <s:TextInput/> 

 </mx:FormItem> 

 <mx:FormItem label="Password:" backgroundAlpha="0"> 

 <s:TextInput/> 

 </mx:FormItem> 

 <mx:FormItem label="Group:" backgroundAlpha="0"> 

 <s:ComboBox> 

 </s:ComboBox> 

 </mx:FormItem> 

 </mx:Form> 

 <s:Button label="Cancel" fontSize="12" bottom="13" x="218"/> 

 <s:Button label="Submit" fontSize="12" bottom="13" x="131"/> 

 </s:Panel> 

运行效果:


图 3. 应用 Flex 4 界面元素及布局组件实现的登录界面
 

我们以实现同样的功能,看一下在 Flex 3 中是如何实现的 ,


Flex 3 示例关键代码:

             

 <mx:Panel x="48" y="75" width="295" height="192" title="Login"> 

 <mx:Form horizontalCenter="0" top="5" backgroundAlpha="0"> 

 <mx:FormItem label="UserName:" backgroundAlpha="0"> 

 <mx:TextInput/> 

 </mx:FormItem> 

 <mx:FormItem label="Password:" backgroundAlpha="0"> 

 <mx:TextInput/> 

 </mx:FormItem> 

 <mx:FormItem label="Group:" backgroundAlpha="0"> 

 <mx:ComboBox></mx:ComboBox> 

 </mx:FormItem> 

 </mx:Form> 

 <mx:ControlBar bottom="10" right="10" horizontalAlign="right"> 

 <mx:Button label="Submit" fontSize="12"/> 

 <mx:Button label="Cancel" fontSize="12"/> 

 </mx:ControlBar> 

 </mx:Panel> 

运行效果:


图 4. 应用 Flex 3 界面元素及布局组件实现的登录界面
 

根据以上两个实例的比较,在代码结构中有明显的区别。Flex 3 的 Panel 容器中只有位置上很少的属性设置,而 Flex 4 做了很多属性样式的设置,这是因为 Flex 3 中 Panel 容器内置了很复杂的样式及布局算法,而在 Flex 4 中 Panel 只是做为一个存放可视组件的容器,样式需要自定义实现,Flex 3 和 Flex 4 生成的 SWF 的文件大小分别是 73KB 和 43KB

这里只是很小的简单实例,如果比较复杂的界面布局中,Flex 4 的容器及布局的组合应用,将在灵活性和程序优化上得到更大的体现。

本地文件操作

做为 WEB 应用程序对客户端机器的文件操作都有安全性的限制,如果在实现对本地文本文件的读写操用只能采用 JavaScript 和 fileinput 控件来获取本地路径,再对本地文件进行读写操作。而在 Flex 3 中则是通过间接调用 JS 来实现,从本质上讲都是一种方法。对于该问题 Flex 4 提供了新的文件操作类 FileReference, 该类包含对本地文件的读取和写入所有方法,而且与之前的方法相比使上方便了许多。

关键代码:

importflash.net.FileReference;

varfileRef:FileReference = newFileReference(); 

 private function openfile():void{ 

     // 注册选择文件事件

 fileRef.addEventListener(Event.SELECT, selectHandler); 

 // 注册文件加载事件

     fileRef.addEventListener(Event.COMPLETE, onLoadComplete); 

     // 打开浏览文件窗口选择文件

     fileRef.browse(); 

 } 

 private

                functionselectHandler(event:Event):void{ 

 varfile:FileReference = FileReference(event.target); 

     // 加载文件内容

 file.load(); 

 } 

 private

                functiononLoadComplete(event:Event):void{ 

     // 读取文件内容

 vartxtStr:String = fileRef.data.readMultiByte(fileRef.data.length,"utf-8"); 

 } 

 protected

                functionsaveBtn_clickHandler(event:MouseEvent):void{ 

 fileRef.save(txt.text,"edb.txt"); 

 } 

皮肤与样式表

Flex Builder 4 缺省主题样式是 Spark 主题,我们之前提到过 Flex 4 保留了 Flex 3 的皮肤和组件架构,即 Flex 4 同时包含有 Halo 和 Spark 两种主题皮肤,所以你可以通过设置项目的属性来改变当前项目的主题样式。通过Properties(属性)->Flex ThemeFlex 主题)面板将主题从默认 Spark 主题改为 Halo。在Flex ThemeFlex 主题)面板中,单击 Halo 主题,并保存。

修改 Flex4 主题样式


图 5.Flex 4 提供的主题皮肤选项列表
 

选择 CSS 模板样式

CSS 模板是对界面配色方案的定义。Flex 4 提供了以下五种 CSS 模板。


图 6.CSS 配色模板列表
 

设置界面风格

在该设置界面的 Flex 4 Graphical Samples 中可以选择界面风格,比如金属风格 (Arcade)、深蓝色金属 (CobaltGraphical)、石墨 (GraphiteGraphical)、木纹风格 (Zen)


图 7. 界面风格选项列表
 

使用 Flex4 提供的这些主题模板可以实现快速建模,提高开发的效率。

双向数据绑定

双向数据绑定是 Flex 4 的一个新特性,顾名思义就是将两个对象的值绑定在一起,无论哪个对象的值发生变化,与之绑定的另外一个对象上的值也会发生相应的变化。一般我们会将数据模型与页面表单的值绑定在一起,当表单值发生改变时,表单值也会自动更新到数据模型上,再用数据模型做一些值有效性校验,这样省去额外的代码,只需一个绑定符即可,也使代码整体上很简洁。

我们通过具体实例来比较 Flex 3 与 Flex 4 中如果同样实现双向数据绑定的方法的差别,实例要实现的功能是任意一个文本框输入,两个文件框都可以同步显示,

关键代码如下:

在 flex3 中,数据的双向绑定用:

 <TextInput id="variable1" text="{variable2.text}"/> 

 <TextInput id="variable2" text="{variable1.text}"> 

在 FLEX4 中,数据的双向绑定用:

 <TextInput id="variable1" text="@{variable2.text}"/> 

 <TextInput id="variable2"> 

很明显,Flex3 要实现双向绑定,就必须用数据绑定符{}将两个文本输入框的值都绑定,而 Flex 4 中则使用新增加的双向数据绑定符 @{}来实现。

MXML 图形元素

在 Flex 3 中如果我们要显示一个矢量图形,我们就要通过可视化组件的 graphics 对象调用绘图 API 来完成,对此,Flex 4 向开发者提供一组基本几何图形类,通过 MXML 标签描述设定其属性来完成矢量图形的绘制,此外这些图形元素还支持渐变色、透明度、位图填充等功能。

我们以 MXML 图形标签绘一个有立体效果的圆体来了解 Flex 4 的图形元素标签的应用。。


关键代码:

             

 <s:Ellipse width="100" height="100" x="281" y="171"> 

 <s:filters> 

 <mx:DropShadowFilter color="0x000000" alpha="0.7" distance="10" angle="45"/> 

 </s:filters> 

 <s:fill> 

 <s:RadialGradient> 

 <s:GradientEntry color="#ffff99" alpha="1" ratio="0"/> 

 <s:GradientEntry color="#ff6600" alpha="1" ratio="1"/> 

 </s:RadialGradient> 

 </s:fill> 

 </s:Ellipse> 

运行效果:


图 8. 圆球立体效果
 

该示例应用了 MXML 图形元素 Ellipse( 用于绘制圆形或椭圆 标签,滤镜效果 (DropShadowFilter),还有填充渐变色功能来完成。

回页首

总结

本文以对比的方式介绍了 Flex 4 带来的部分新特性,未提及的部分请读者关注 Flex 的官方文档或在实际使用过程中自行体会。希望本文能对 Flex 使用者带来帮助。

参考资料

学习

· 您可以参考 Flex 4 API 全面了解组件的功能。

· 如果想对 Flex 4 Skin 有更详细的了解可以参阅 developerWorks 的 《用于创建 SaaS 的 Flex 4 特性》

· 从 Adobe Open Source 随时关注更多关于 Flex 4 SDK 内容。

· 安装 Tour de Flex查看 Flex 4 组件应用实例及代码。

· 随时关注 AIRIA 开发交流论坛,关注 Flex 开发过程中遇到的难题,分享 Flex 开发经验心得。

· developerWorks Web development 专区:通过专门关于 Web 技术的文章和教程,扩展您在网站开发方面的技能。

· developerWorks Ajax 资源中心:这是有关 Ajax 编程模型信息的一站式中心,包括很多文档、教程、论坛、blogwiki 和新闻。任何 Ajax 的新信息都能在这里找到。

· developerWorks Web 2.0 资源中心,这是有关 Web 2.0 相关信息的一站式中心,包括大量 Web 2.0 技术文章、教程、下载和相关技术资源。您还可以通过 Web 2.0 新手入门 栏目,迅速了解 Web 2.0 的相关概念。

· 查看 HTML5 专题,了解更多和 HTML5 相关的知识和动向。

讨论

· 加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。

作者简介

马润生主要从事 ERP 系统的开发工作,非常关注于富客户端解决方案的技术和产品,尤其对 Flex 技术的兴趣更为浓厚。

王惇是 IBM 中国软件开发中心工程师,主要从事基于 WebSphere Portal Server 以及 WebSphere Process Server 软件的业务集成解决方案的开发工作,具有丰富的产品测试及解决方案开发经验。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值