`
xdq406at
  • 浏览: 19493 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Flex 4 新体验

 
阅读更多

Flex 4 新体验
2010年06月27日
  直到最近才开始真正使用Flash Builder4来开发Flex应用。开始还是用Flex3的思想来进行开发,后来才逐渐发现原来自己Out了,完全没有用上Flex4的特性。下面仅说一下我用到的Flex4的新特性,当然这不全是Flex4所有新特性。
  1.Spark控件和Skin
  旧的控件仍然在mx命名空间之下,新增加的Spark控件体系也是在UIComponent基类扩展的。所以其根本并没有动摇,这样就可以在最大程度上使得mx控件和spark控件最大程度兼容。但是为什么要有Spark空间呢,而且多数都是与mx中原有控件一一对应的?目的只有一个那就是要将逻辑和样式分开。逻辑交给ActionScript负责,而样式则由Skin来负责。在Skin中可以利用各种flex4提供的绘图控件,如Path,Rect,Line等等,而有了这些就可以为控件提供背景色和边框等样式,因此Spark控件多数都没有mx控件所有的backgroundColor,border之类的style属性。
  你可以在这里找到关于Spark的架构。在spark体系中,增加Group这个常见的Container,这个有些类似于mx中的Box.因此可以想象会有类似VBox和HBox的VGroup和HGroup。Spark中的容器默认是BasicLayout,当然你可以设置为HorizantalLayout或者VerticalLayout。在给spark控件的Skin增加Rect或者Line的时候就要注意了,通常是在BasicLayout当中进行绘图,这样坐标才起作用,而在HorizantalLayout或者VerticalLayout则会影响你所设置的坐标。
  对于Spark中的Button等SkinableComponent是如何做到跟Skin结合的呢?我没有深入研究,但是根据一些粗浅的猜测可能是这样的:用Button来举例,利用FlexSpy观察出来,Button在显示的时候,它的子节点并不像原来那么单纯,可能就是一个label来显示文本,spark button的子节点却是一个ButtonSkin(注意Skin也是从UIComponent继承下来的),而在ButtonSkin的子节点下面才会有个Labe文本。因此当我们在ButtonSkin增加各种样式的时候也就反应到Button。在Button中你可以看到有一个labelDisplay的对象,也就是用于显示文本的Label,如果在ButtonSkin中我们不包含这个控件,则你的Button即使设置了label也不会显示任何东西。再提一点,这个labelDisplay在Button中会用SkinPart元素据标明,在Button源代码中你并没有看到labelDisplay被显示地创建。而在mx的button源代码中我们可以发现有一个textField在createChildren函数中被创建出来,它就是用来显示button的文本。那怎么将spark中Button的labelDispaly于Skin中的labelDisplay(注意这两者的名字必须一致)关联起来呢?你可以发现在SkinableComponent中有一个PartAdded的方法,而所有子类在继承该类的时候都会override这个方法以加入自己特定的SkinPart,如果存在SkinPart的话。顺着这个方法,你可以找到在该类的attachSkin方法会调用findSkinParts,而findSkinParts则会将Skin中定义的labelDisplay赋值给Button中定义的labelDisplay变量。但实际上这个labelDisplay控件还是Skin的子节点,而不是Button的子节点。
  还要注意对于SkinnableComponent来说存在两中不同的state,一个是控件本身的,如Button的down,up等状态,还有就是相应的ButtonSkin的down,up状态。这两者是不一样的。如果你设置了Button的状态,而不是更新了Skin的状态,那么你的Skin中不同状态的样式并不会起作用。SkinnalbeComponent中有一个方法是getCurrentSkinState,这个方法的返回值决定了Skin的State,因此你可以发现Button实际上覆盖了这个方法以返回Skin的不同状态。为了判断Skin的State,Button实际上是监听了MouseEvent,从而判断当前处于什么Skin State。为了真正使Skin State起作用,还需要调用invalidateSkinState方法。
  2.FXG
  定义了很多基本的图形如Rect, Line, Path等,对于fxg创建的控件你可以在MXML中直接引用。其实所有fxg控件都有对应的MXML控件。不过两者之间有个很重要的区别:MXML控件(如s:Rect, s:Line等)会在编译的时候转化为对应的ActionScript类,但是Fxg控件则会转成更低级别的flash player 指令。也就是说Fxg对应的控件为被优化,出于性能考虑可以尽量用fxg。从以下链接可以找到更多关于Fxg的有用信息。
  DataGroup会提供ItemRender,这个render比原来mx中datagrid的render有所改进,譬如可以得到data和itemIndex,而且可以赋值labelFunction。不过不能提供Skin。因此如果你想要用Skin的话就意味着你需要自己创建一个SkinableComponent,然后将它放入renderer。这样就遇到一个问题如何使得SkinnableComponent的Skin State会随着Renderer的state变化而变化。照理来说Renderer的State应该对应的是UIComponent的currentState,但是好像这个值也可以控制Renderer里面定义的样式,譬如可以设置某个Rect.includeIn="selected",这样选中的时候该Rect将显示。关于Renderer的State是个比较特殊的问题,你可以在官方文档中找到更多说明:http://help.adobe.com/en_US/flex/using/WS03d33b807 6db57b9-23c04461124bbeca597-8000.html#WS05A80398-9D D3-445a-BD33-A7D9FD695FA3
  itemRendererFunction也是一个好东西,你可以根据情况选择不同的ItemRenderer。对于
  With virtual layout disabled (useVirtualLayout=false), the DataGroup and SkinnableDataContainer containers create one instance of the item renderer for each child. With virtual layout enabled, the container only creates enough item renderers to display its currently visible children. Virtual layout greatly reduces the overhead required to use the DataGroup and SkinnableDataContainer containers.
  4.Css选择符
  可以支持子类选择等特性增加进来。我印象中这个原来就有了。具体我也不熟悉。但是有一点要提醒的是,如果你自定义了一个控件mycomp,在这个控件中引用了一个List,你想对这个List增加样式,并把样式设置为
  local|mycomp s|List{****}
  显然在mycomp里面引用该css,这样任何地方引用mycomp都可以得到一样的外观。但是实际上在mycomp中引用css文件的时候会报错,说什么List的选择符不支持。但是我们如果在Application下面引入该css就一切正常。原因没有深究,但是解决方案就是如果你要在mycomp中引用该css文件,那么就不要定义类型选择符,而是用类型选择符或者id选择符,如给List增加styleName="list",mycomp增加styleName="mycomp"
  .mycomp .list{*****}
分享到:
评论

相关推荐

    flex4新特性展示(中文版)

    ### Flex4新特性展示 #### 一、Adobe Flex 4 SDK及Framework Adobe Flex 4 SDK及Framework作为Adobe公司的核心产品之一,在版本更新中引入了一系列革新性改进和技术优化,为开发者提供了更为强大的功能和更佳的...

    flex4 实战 flex4 in action

    Flex 4是Adobe Flex框架的一个重大升级,它引入了许多新的特性和改进,以提升富互联网应用程序(RIA)的开发效率和用户体验。在Flex 4中,最重要的变化之一是组件模型的改变,引入了Spark组件架构,它与原有的MX组件...

    FLEX4_Flex4教程 - FLEX4从入门到精通,挺不错的值得一看

    4. **States和Transitions**:Flex4中的States和Transitions机制允许开发者轻松管理UI的不同状态,比如在不同视图之间切换,以及添加平滑的动画效果,提高用户体验。 5. **数据绑定**:Flex4的数据绑定功能使得UI...

    Flex 4的十大变化

    Flex 4,也被称为Gumbo,是Adobe Flex框架的一个重大更新,它引入了许多关键变化以提升RIA(Rich Internet Applications)的开发效率和用户体验。以下是Flex 4中的十大变化的详细说明: 1. **Adobe Catalyst集成**...

    Flex3与flex4的区别

    Flex4,其代号为Gumbo,是在Flex3的基础上进行了重大升级,旨在改进用户体验和开发效率。下面将详细探讨Flex4与Flex3在组件架构、布局管理、状态使用、效果实现以及迁移过程中的关键差异。 ### 组件和外观架构 ...

    Flex 4 高级编程 Flex 4 高级编程

    4. **骨骼动画(Skinning and States)**:Flex 4 强化了组件的皮肤机制,通过定义不同状态(如normal、hover、down等),可以实现组件在不同交互下的动态变化,增强了用户体验。 5. **数据绑定和依赖注入**:Flex ...

    Flex4开发实践PPT

    Flex4,全称为Adobe Flex 4,是Adobe公司推出的一款强大的富互联网应用程序(RIA)开发框架,主要用于构建具有丰富用户体验的Web应用。本PPT详细讲述了Flex4的开发实践,旨在帮助开发者从基础到实践全面掌握这一技术...

    Flex4实战代码

    CH08 - "状态管理与动画":状态管理和动画是Flex提升用户体验的重要手段。可能讲述了如何定义和切换组件的状态,以及使用Tween类和Effects框架实现动态效果。 CH12 - "高级组件与布局":这里可能深入讨论了Flex4中...

    flex_4 开发详解

    综上所述,Flex 4 开发详解涵盖了Flex技术的核心特点,如增强用户体验、完善的开发环境、通用配置以及企业级特性等,同时详细介绍了Flex SDK 4的新特性和Flash Builder 4的下载与安装过程,为开发者提供了一套全面的...

    FLEX4的皮肤skin

    在Flex 4中,皮肤(Skin)是一种强大的机制,用于改变和定制UI组件的外观和交互体验。本文将深入探讨FLEX4中的皮肤系统,特别是SparkSkin类,并通过实例展示如何创建和应用自定义皮肤。 1. SparkSkin的介绍: ...

    flex4 学习资料

    3. **Spark组件库**:Flex4引入的新组件集,相比Flex3的 Halo 组件,Spark组件具有更好的可定制性和性能,且更符合设计模式。 4. **skins和styles**:Flex4中的皮肤(skins)和样式(styles)系统允许开发者自定义...

    Effortless Flex 4 Development

    Flex 4是该框架的一个重要版本,引入了许多新功能和改进,使得开发者能够更加高效地创建动态、交互式的应用程序。Flex 4基于Adobe Flash Player和Adobe AIR运行时环境,允许开发者利用丰富的多媒体功能,包括视频、...

    Flex4学习文档

    学习Flex4不仅仅是为了学习技术本身,还涉及到学习如何使用这些技术来构建富有吸引力的用户界面,提升用户体验,以及如何优化应用性能以确保其在不同环境下的稳定性与速度。 总结来说,Flex4学习文档为开发者提供了...

    Flex4 经典帮助文档

    Flex4 是Adobe公司开发的一个强大的富互联网应用程序(RIA)框架,用于构建具有丰富用户体验的Web应用。这个经典帮助文档着重于介绍Flex4相较于其前代版本的改进和新特性,帮助开发者更好地理解和利用这一更新的技术...

    flex4.5.1.chm flex4API文档

    6. ** States 和 Transitions**:Flex 4 引入了状态管理和过渡效果,使得在不同UI状态之间轻松切换,为用户带来动态的交互体验。 7. **Flex Builder**:虽然这里提到的是API文档,但值得一提的是,Flex Builder...

    Flash Builder 4 and Flex 4 宝典

    《Flash Builder 4 and Flex 4 宝典》是一本深度探讨Adobe开发工具和技术的专业书籍,专注于使用Flash ...通过这本书,你将能够利用Flash Builder 4和Flex 4构建出富有创新和吸引力的RIA,为用户提供卓越的Web体验。

    flex builder 4 help

    Flex 4是Flex框架的一个重大升级版本,引入了许多新特性,增强了UI设计和组件定制能力。 《Flex Builder 4 Help》这个英文文档是Flex Builder 4用户的重要参考资料,它详细阐述了如何使用该IDE进行Flex开发。下面,...

    Flex4 in Action

    - **增强的动画和视觉效果**:Flex4 增强了动画和视觉效果支持,使得开发者可以创建更丰富、更互动的用户体验。 - **扩展的工具支持**:Flex4 与 Flash Builder 和 Flex SDK 的集成更加紧密,提供了更多开发工具的...

    flex4 实例 例子

    Flex 4 是 Adobe 开发的一个开源框架,专用于构建富网络应用(Rich Internet Applications, RIA),这些应用能够在 Adobe Flash Player 或 Adobe AIR 运行时环境中运行,支持跨浏览器、跨桌面和跨操作系统。Flex 4 ...

    Flex4中文快速入门

    Flex4,全称为Adobe Flex 4,是Adobe公司推出的一款用于构建富互联网应用程序(Rich Internet Applications,RIAs)的框架,主要基于ActionScript和MXML。这个框架在2010年发布,提供了更为强大的图形渲染能力,以及...

Global site tag (gtag.js) - Google Analytics