• 1. 第12章 导航导航的作用是在不同的子组件之间相互切换的时候,能够保证顺利的操作运行和导向。在软件界面设计中,导航起到了主导作用。更好的导航设计可以使用户体验更加人性化。本章包括以下内容: ViewStack导航 Tab导航 Accordion
  • 2. 12.1 ViewStack导航设计ViewStack是一种可以灵活定义的导航,其各个子组件可以是任意形式的。同时,ViewStack导航没有为用户提供可以切换当前活动容器的导航组件,需要自行定义。
  • 3. 12.1.1 创建ViewStack容器在Flex中,已经预置了ViewStack导航容器。通过标签可以创建一个ViewStack导航容器。切换当前活动容器的导航组件可以通过使用诸如LinkBar、TabBar、ButtonBar、或者ToggleButtonBar组件完成。
  • 4. 12.2.2 实现不同子容器之间的传值在ViewStack导航中,最常用的功能就是当切换每个子容器的时候,能够互相的传送参数。传送参数的一般的做法是可以创建一个全局的静态类或者静态变量,把参数值暂时存放起来。
  • 5. 12.2 标签导航设计标签导航又称选项卡导航,这种导航是通过管理若干个标签页,来切换子容器的。标签导航容器是ViewStack导航容器的子类,集成了ViewStack的诸多功能。
  • 6. 12.2.1 使用TabNavigator导航容器在Flex中,提供了TabNavigator标签导航容器。使用标签可以创建一个TabNavigator导航容器。
  • 7. 12.2.2 动态添加TAB标签在TabNavigator导航容器的应用中,动态添加TAB标签是最常用的了。动态添加TAB标签是根据用户的操作,添加指定数量的TAB标签的数量。
  • 8. 12.3 折叠导航设计表单是很多应用中最基本的组件之一。当遇到多个关联表单,使用者可能会遇到操作上的困难。当表单很多,并且不能集成在同一个页面时,用户需要在多个表单之间前后移动切换。折叠导航设计可以有效的解决这个问题。在Flex中,使用标签可以创建一个Accordion导航容器。
  • 9. 12.4 本章实例:名片管理系统名片管理是日常应用中必备工具之一,可以轻松查找和添加联系人的信息。 【实例12-1】本例制作一个简单的名片管理功能,添加的数据项暂时保存在客户端的数组集合中。删除某一个数据项时,给出提示信息。
  • 10. 12.5 小结本章主要讲解了导航组件的应用设计,其中包括了ViewStack、TabNavigator以及Accordion。其中重点讲解了在不同视图之间的切换。下一章将会讲解菜单的设计。
  • 11. 12.6 习题1.如何使用ViewStack组件设计导航? 2.如何使用TabNavigator组件设计导航? 3.如何使用Accordion组件设计导航?
  • 12. 第13章 菜单设计上一章介绍了导航的设计,在实际开发中,导航往往要结合菜单的操作。菜单主要的作用就是功能模块的导航,通过菜单,用户可以快速的切换到需要的功能。Flex中的菜单大体有三种:上下文菜单、菜单条以及弹出式菜单。本章将详细讲述Flex中菜单的设计。本章包括以下内容: 上下文菜单的设计 菜单条的设计 弹出式菜单的设计
  • 13. 13.1 上下文菜单的设计上下文菜单是菜单的基础形式,如常用的右键菜单。上下文菜单定义比较灵活,可以在任意位置、任意组件上弹出菜单。
  • 14. 13.1.1 使用Menu控件创建菜单在Flex中,上下文菜单的设计需要依靠Menu类来实现。在Menu类的createMenu方法中,已经定义了创建菜单所需要的基本要素,并以参数的形式设置。createMenu方法的语法格式如下所示。 public static function createMenu(parent:DisplayObjectContainer, mdp:Object, showRoot:Boolean = true):Menu 参数说明: parent:放置菜单控件的父容器。 mdp:菜单控件显示的数据源。 showRoot:在菜单上是否显示数据源的根节点。
  • 15. 13.1.2 菜单事件在菜单控件中,定义了几个常用的事件,包括单击菜单项、更改当前选择菜单、菜单显示和隐藏等。这些事件类型包含在MenuEvent类中,MenuEvent类的事件如表13.1所示。
  • 16. 13.2 菜单条的设计菜单条是一个显示顶级菜单项的横向条目。单击每个顶级菜单都会弹出一个子菜单。菜单条是继承了Menu类,所以,具有和Menu控件同样的事件。
  • 17. 13.2.1 使用MenuBar控件创建菜单菜单条的设计要依赖于MenuBar控件,这个是在Flex中已经提供了。
  • 18. 13.2.2 菜单事件由于MenuBar控件是继承自Menu类的,所以具有Menu类的所有事件特性。
  • 19. 13.3 弹出式按钮菜单的设计弹出式按钮菜单是一个以按钮的形式弹出的菜单。当用户单击按钮时,会弹出一个顶级的菜单项。与菜单和菜单条不同,弹出式按钮菜单只支持顶级菜单。
  • 20. 13.3.1 使用PopUpMenuButton控件创建菜单要设计一个弹出式按钮菜单,需要使用Flex中提供的PopUpMenuButton控件。
  • 21. 13.3.2 菜单事件PopUpMenuButton是PopUpButton控件的子类,所以,PopUpMenuButton控件支持PopUpButton控件的所有事件。
  • 22. 13.4 本章实例:多窗口文档编辑器多窗口文档编辑器是文档类应用程序中常用的表现形式,多窗口文档有很多好处,如占用资源少,可以有效的组织文档结构和类别。
  • 23. 13.5 小结本章主要讲解了Flex的菜单设计,其中包括了右键菜单、菜单条以及弹出式菜单等。本章重点讲解了菜单的创建、绑定数据以及实现菜单项命令等。下一章将讲解行为和特效。
  • 24. 13.6 习题1.如何实现一个右键菜单? 2.怎样创建一个菜单条? 3.如何创建一个弹出式菜单?
  • 25. 第14章 行为和特效Flash是一个表现力非常强的平台,可以创造出一切想要的特效效果。在Flex所提供的类库中,就包含了一些行为和特效,可以实现表现力很强的动画效果。本章包括以下内容: 使用行为 拖放行为特效 使用ViewState 过度特效 使用ToolTips
  • 26. 14.1 使用行为行为可以添加一些效果和动作,以相应用户和程序的操作。例如,使用行为,可以使一个窗体慢慢的淡入,直到完全可见。本节将会详细介绍行为的使用。
  • 27. 14.1.1 行为简介在Flex中,提供了一些有关行为的组件,可以通过使用MXML或者ActionScript定义这些行为。
  • 28. 14.1.2 在ActionScript中使用行为除了使用MXML代码创建行为外,还可以使用ActionScript代码。所有的行为类都放在mx.effects包中,所以在使用行为类之前需要引入此包。
  • 29. 14.2 拖放行为特效拖放操作可以把数据从一个地方拖到另外一个地方。在可视化的应用系统中,这样的操作是非常便捷的。本节将介绍在Flex中拖放效果的实现过程。
  • 30. 14.2.1 容器之间移动数据几乎每个数据容器组件都有两个属性:dragEnabled和dropEnabled。dragEnabled属性表示允许从组件中拖出数据,而dropEnabled属性则表示允许向组件中放置数据。 默认情况下,当移动数据的时候,向目标对象中添加数据,同时在源对象中就会删除相应的数据。
  • 31. 14.2.2 容器之间复制数据在默认情况下,设置dragEnabled和dropEnabled属性的值,可以移动数据。但是有些情况下,需要复制数据。在数据容器之间复制数据,需要设置dragDrop事件。
  • 32. 14.2.3 手动添加拖放功能数据控件中已经内置了拖放功能的支持,但是其他Flex组件却不受支持。想要非数据控件也支持拖放功能,必须通过相应的事件驱动来实现。
  • 33. 14.3 使用View States通过View States可以改变一个组件或是应用程序的外观,以相应用户的操作。例如,Adobe Reader阅读器中,当单击侧边栏相应按钮时,就会显示或隐藏书签和页面的导航栏。
  • 34. 14.3.1 使用View States改变局部视图在Flex内置提供的View States组件中,可以向目标容器添加任意组件,还可以使用SetProperty设置其任意属性的值。通过这些特性,可以更新局部视图。
  • 35. 14.3.2 View States之间的继承关系为了更好地应付复杂的代码,在View States组件中内置了继承的功能。所谓的继承,就是可以从其他的View States组件中继承相同的功能,而不需要再创建或设置一次。这样就大大增强了代码的重用性,使得开发更加快速,代码维护更加容易。
  • 36. 14.3.3 使用比较运算符通过使用比较运算符,可以使得在同一个组件中,控制不同的视图。
  • 37. 14.4 过渡特效TransitionsView States是用来改变一个组件或是应用程序的外观。Transitions则是定义了在视图之间切换的动作行为。可以通过使用effect类,来定义视图切换的动画效果。
  • 38. 14.4.1 使用TransitionsTransitions组件通过使用effect类,可以设置切换视图的不同动画特效。
  • 39. 14.5 使用ToolTipsToolTips用来向用户提供一些相关的帮助信息,这有助于用户的操作。当用户把鼠标移动到可视化的控件中时,ToolTips就会引导用户进一步的操作程序。
  • 40. 14.5.1 使用ToolTips属性在很多应用程序中,ToolTips都是一个标准性的功能。在Flex中也不例外,同样也提供了这样的属性。
  • 41. 14.5.2 设置ToolTips样式如果默认的ToolTips样式不理想,可以通过Style组件,自己定义一个ToolTips样式。
  • 42. 14.5.3 使用ToolTips管理器在Flex中提供了一个ToolTipManager类,是用来设置ToolTips相关特性的,如是否显示。ToolTipManager类位于mx.managers包中。
  • 43. 14.5.4 创建一个自定义的ToolTips在ToolTipManager类中,提供了两种方法来使用ToolTips。一个是createToolTip,用来创建ToolTips。另一个是destroyToolTip,用来销毁ToolTips。使用这两个方法,就可以在所有的组件中定义ToolTips。
  • 44. 14.6 本章实例:用户登录系统用户登录系统是大部分的应用程序中都有的功能,是进入系统的入口点。【实例14-1】本例制作一个简单的用户登录系统。
  • 45. 14.7 小结本章主要讲解了Flex中行为和特效,其中重点讲解了几个常用的行为特效,如拖放动作、过度特效以及ToolTip等。下一章将讲述Flex的样式和主题。
  • 46. 14.8 习题1.什么是行为? 2.在两个组件或者容器之间创建一个拖放的特效? 3.如何使用ViewStates创建窗口特效? 4.如何创建一个提示ToolTip控件?
  • 47. 第15章 样式和主题样式对于一个应用程序来说也是非常有用的,使用样式和主题可以改变单个组件或者全部组件的外观,使他们看起来更加舒服。本章包括以下内容: 使用样式 使用字体 加载图像 创建皮肤 指针管理
  • 48. 15.1 使用样式通过样式属性可以更改Flex组件的外观,这些属性包含了文字大小、背景颜色等定义。定义样式属性可以有几种方法,包括内部定义、设置组件样式属性、通过外部样式表文件等。
  • 49. 15.1.1 使用Style组件定义样式通过标记,可以定义CSS 2.0的语法。可以把定义的这些样式应用到当前文档或者其子文档。使用标记定义样式的格式如下所示。 selector_name { style_property: value; [...] } 其中,selector_name是样式名称,style_property是样式属性,value是属性的值。这些都是严格遵循CSS 2.0的语法。
  • 50. 15.1.2 使用StyleManager类定义样式在ActionScript中使用StyleManager类,可以使用类的选择器设置样式。使用StyleManager类,还可以声明新的CSS样式,并且应用到Flex程序中的控件。
  • 51. 15.1.3 外部样式表Flex同HTML一样,也支持外部的CSS样式表。使用标记中的source属性,可以把外部的样式表应用到当前文档或者其子文档中。
  • 52. 15.2 使用字体在应用程序中可以包含字体。包含的字体既可以是默认操作系统内置的,还可以是其他的外部字体。如果使用非系统默认的,那么就需要嵌入到应用程序中。
  • 53. 15.2.1 使用系统字体通过fontFamily属性,可以把任何一个字体应用到程序中。然而,并不是所有的系统拥有所有的字体。系统字体并不能以外部信息的形式导出来,也不能嵌入在SWF文件中一起发布。
  • 54. 15.2.2 使用嵌入式字体相比较使用系统字体,嵌入式字体的优势在于在程序运行时,指定的字体总是显示出来,不管系统中是否有这种字体。开发时不用去考虑字体样式丢失的问题。
  • 55. 15.3 指针管理器在Flex中,使用指针管理器可以控制鼠标指针的图片。当程序等待进程到完成的过程中,可以使用指针管理器提供一个用户提示。这些图片类型可以包括JPEG、GIF、PNG以及SVG等,还可以是一个Sprite对象,或者一个SWF文件。 指针管理器是放在包mx.managers.CursorManager中的,通过CursorManager类的静态属性和方法就可以控制鼠标指针的样式。
  • 56. 15.4 本章实例:使用Flex主题通过使用Flex的样式功能,可以自定义一个Flex的主题,并可以打包成SWC文件,以提供其他应用程序使用。 【实例15-1】本例使用一个创建好的Flex主题皮肤,构建了一个用户登录界面。
  • 57. 15.5 小结本章主要讲解了在Flex中如何创建样式和主题,并且在应用在程序中。通过本章的介绍,读者应能自行创建样式和主题,并在实际应用程序中使用。
  • 58. 15.6 习题1.如何创建一个外部的样式文件,并使用? 2.如何自定义一个指针? 3.如何使用嵌入式字体? 4.创建并应用一个自定义的主题?
  • 59. 第16章 HTTPService和Web Service通过Flex数据访问组件,可以从Flex客户端程序发送数据到服务器,与服务器端相互通信。Flex可以同大多流行的服务器技术通信,如PHP、Adobe ColdFusion、微软的ASP.NET以及JAVA等。本章包括以下内容: 使用HTTPService 使用Web Service
  • 60. 16.1 使用HTTPService使用HTTPService组件可以与各种服务器技术的页面传递数据,包括PHP、ColdFusion、JSP、ASP等。本节将会重点讲述HTTPService组件的实现原理以及如何应用这种组件。
  • 61. 16.1.1 读取数据通过设置HTTPService组件的url属性的值,可以读取远程服务器端的数据。远程服务器端输出的结果集可以是多种格式,如文本、XML、数组等,在客户端可以通过HTTPService组件的resultFormat属性来设置输出的格式。
  • 62. 16.1.2 提交数据使用HTTPService组件除了可以读取远程服务器端数据之外,还可以和传统HTML页面中的表单Form一样,使用POST或者GET提交数据。要提交数据,需要设置HTTPService组件中的method属性。
  • 63. 16.2 使用Web Service通过使用WebService组件,Flex应用程序可以使用Web服务来定义与远程服务器通信的接口。Web服务使用标准的WSDL描述格式,所以不需要格式转换,就可以轻易的做到数据交换。
  • 64. 16.2.1 使用MXML代码访问Web服务在Flex中也提供了相应的组件,用以更好的访问WebService。这个组件支持SOAP消息格式,SOAP定义了基于XML格式的数据交换类型。通过这个组件,Flex可以与所有支持SOAP消息格式的提供Web服务的服务器端程序通信。
  • 65. 16.2.2 使用ActionScript访问Web服务除了使用WebService组件外,Flex中还提供了WebService类。使用WebService类同样可以访问Web服务。
  • 66. 16.3 本章实例:在线翻译【实例16-1】本示例使用Google API接口中的语言翻译服务,创建一个语言翻译系统。
  • 67. 16.4 小结本章主要讲解了HTTPService和WebService两种组件访问远程数据。下一章将要讲解Flex如何与Ajax实现通信。
  • 68. 16.5 习题1.如何通过HTTPService访问远程数据? 2.如何通过WebService访问远程数据?
  • 69. 第17章 Flex Ajax桥Ajax程序已经成为很流行的技术,但是Flex的前景不容忽视。在某些时候,为了追求更好的用户体验,常常会面对一些问题,如何把Ajax应用程序与Flash资源更好的结合。本章将会介绍一个Flex与Ajax交互最佳的解决方案,即FABridge。本章包括以下内容: Ajax简介 使用FABridge
  • 70. 17.1 Ajax简介Ajax并不是一个新技术,只是利用了JavaScript脚本中某些对象和方法,与远程服务器端通信。把更多的数据处理转移到了客户端,从而实现了更好的用户体验。
  • 71. 17.1.1 AJAX定义Ajax不是一个技术,它实际上是几种技术,每种技术都有其独特这处,合在一起就成了一个功能强大的新技术。Ajax包括: XHTML和CSS 使用文档对象模型(Document Object Model)作动态显示和交互 使用XML和XSLT做数据交互和操作 使用XMLHttpRequest进行异步数据接收 使用JavaScript将它们绑定在一起
  • 72. 17.1.2 AJAX使用通过在用户和服务器之间引入一个Ajax引擎,可以消除Web的开始-停止-开始-停止这样的交互过程。就像增加了一层机制到程序中,使它响应更灵敏,而它的确做到了这一点。 不像加载一个页面一样,在会话的开始,浏览器加载了一个Ajax引擎---采用JavaScript编写并且通常在一个隐藏frame中。这个引擎负责绘制用户界面以及与服务器端通讯。Ajax引擎允许用异步的方式实现用户与程序的交互--不用等待服务器的通讯。所以用户再不不用打开一个空白窗口,看到等待光标不断的转,等待服务器完成后再响应。
  • 73. 17.1.3 与传统的web应用比较AJAX应用可以仅向服务器发送并取回必需的数据,它使用SOAP或其它一些基于XML的web service接口,并在客户端采用JavaScript处理来自服务器的响应。因为在服务器和浏览器之间交换的数据大量减少,结果就能看到响应更快的应用。同时很多的处理工作可以在发出请求的客户端机器上完成,所以Web服务器的处理时间也减少了。Ajax应用程序的优势在于: 通过异步模式,提升了用户体验 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用 Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载。
  • 74. 17.1.4 发展史技术在1998年前后得到了应用。允许客户端脚本发送HTTP请求(XMLHTTP)的第一个组件由Outlook Web Access小组写成。该组件原属于微软Exchange Server,并且迅速地成为了Internet Explorer 4.0[3]的一部分。部分观察家认为,Outlook Web Access是第一个应用了Ajax技术的成功的商业应用程序,并成为包括Oddpost的网络邮件产品在内的许多产品的领头羊。但是,2005年初,许多事件使得Ajax被大众所接受。Google在它著名的交互应用程序中使用了异步通讯,如Google讨论组、Google地图、Google搜索建议、Gmail等。Ajax这个词由《Ajax: A New Approach to Web Applications》一文所创,该文的迅速流传提高了人们使用该项技术的意识。另外,对Mozilla/Gecko的支持使得该技术走向成熟,变得更为易用。
  • 75. 17.1.5 优点和缺点使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息。 Ajax不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。就像DHTML应用程序那样,Ajax应用程序必须在众多不同的浏览器和平台上经过严格的测试。随着Ajax的成熟,一些简化Ajax使用方法的程序库也相继问世。同样,也出现了另一种辅助程序设计的技术,为那些不支持 JavaScript的用户提供替代功能。
  • 76. 17.1.6 Ajax的工作原理Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。在创建Web站点时,在客户端执行屏幕更新为用户提供了很大的灵活性。
  • 77. 17.2 使用FABridgeFABridge类库实际上只是整合了ExternalInterface类,使得在创建Flex与Ajax通信时更加容易。
  • 78. 17.2.1 FABridge简介Flex Ajax桥(FABridge)是一个小型的代码库,通过这个接口,可以实现Flex与Ajax互相通信。FABridge类库在以下的情况下可以被使用: 在Ajax应用程序中想要使用更加丰富的Flex组件,而不想编写更多的Flex代码。 在一个小型的开发团队中,只有一两个人懂得Flex。使用FABridge类库,可以更加有效的开发项目。 计划使用Ajax和Flex构建一个RIA程序。虽然可以使ExternalInterface类来创建,但是发现使用FABridge会更加的容易,并且提高效率。
  • 79. 17.2.2 使用FABridge从HTML页面传递数据到Flash中有很多种方法,包括使用查询字符串和标记。但是这些方法只能将数据传递到容器中。在ActionScript类库中,提供了更加强大的技术,使用ExternalInterface类。ExternalInterface类是一个应用程序编程接口,负责ActionScript和JavaScript之间的通信。 FABridge类库整合了ExternalInterface类,其中主要包含了两个文件,FABridge.as和FABridge.js。通过调用FABridge.as中的FABridge类,就可以方法JavaScript数据。通过使用FABridge.js中的FABridge函数就可以访问ActionScript中的数据。通过这两个文件,可以达到两者相互访问的目的。
  • 80. 17.3 本章实例:相册【实例17-1】本例制作一个简单的相册功能,添加四个选择相册按钮。单击时切换并显示相应的相册图片。
  • 81. 17.4 小结本章主要讲解了Flex如何与Ajax实现通信,同时也简单介绍了Ajax技术。本章重点是使用FABridge框架,实现Flex与Ajax通信。下一章开始将讲解Flex与服务器端技术的通信。
  • 82. 17.5 习题1.如何实现Flex与Ajax通信? 2.什么是Ajax,有哪些优点?
  • 83. 第18章 ColdFusionColdFusion是Adobe公司发布的服务器端技术。使用ColdFusion可以创建动态的服务器端程序,并且可以与客户端技术(如Flex等)无缝的通信。本章包括以下内容: ColdFusion简介 使用ColdFusion
  • 84. 18.1 ColdFusion简介ColdFusion是动态的服务器端编程语言,使用标记语言CFML编写代码。与其他的服务器编程技术相比,有很多自身的特性。
  • 85. 18.1.1 什么是ColdFusionColdFusion和J2EE、.NET、PHP一样,都是服务器端语言。ColdFusion可以通过以下几点的描述概括其特性。 ColdFusion是一个服务器端语言,可以创建动态的Web页面或者Web服务,是一种后台服务器技术。 在服务器端发送到请求的客户端浏览器之前,ColdFusion可以生成HTML代码 也可以使用ColdFusion语言在服务器端进行逻辑处理,然后把结果传送到客户端。
  • 86. 18.2 使用ColdFusionColdFusion是服务器技术,通常会与客户端技术结合使用。ColdFusion的服务可以与现有的服务器结合在一起(如IIS、Apache等)启动,也可以单独运行。
  • 87. 18.2.1 安装ColdFusionColdFusion服务器安装程序可以从官方网站通过下载获取。下载完安装文件后,开始安装ColdFusion服务器。
  • 88. 18.2.2 创建第一个Flex和ColdFusion通信程序【示例18-1】本例子创建一个简单的Flex与ColdFusion通信的应用程序,在客户端获取服务器的文本数据。
  • 89. 18.3 本章实例:留言本(ColdFusion版)【实例18-1】本示例通过使用ColdFusion项目,制作一个简单的留言本。本示例实现了Flex与服务器端技术ColdFusion的通信。
  • 90. 18.4 小结本章主要讲解了Flex与ColdFusion的通信,同时也简单介绍了关于ColdFusion的知识。下一章将讲解Flex与PHP通信问题。
  • 91. 18.5 习题1.什么是ColdFusion? 2.Flex如何与ColdFusion进行数据交换?
  • 92. 第19章 Flex与PHPPHP是一种开源的Web开发脚本语言。通常PHP应用程序使用HTML和JavaScript客户端技术来提供用户界面。自从Flex应用程序可以与PHP无缝通信之后,使用Flex作为PHP应用程序的客户端技术,在表现力方面则更为出色。本章将会详细介绍Flex与PHP的通信技术。本章包括以下内容: PHP简介 使用AMFPHP
  • 93. 19.1 PHP简介PHP是一种开源的、用于Web开发的脚本语言。PHP语言其简单易用、快速开发等特性受到越来越多的Web开发者的欢迎。如今已经成为流行的编程语言之一。
  • 94. 19.1.1 PHP脚本语言PHP是作为一个小开放源码,随着越来越多的人意识到它的实用性从而逐渐发展起来。Rasmus Lerdorf在1994年发布了PHP的第一个版本。从那时起它就飞速发展,并在原始发行版上经过无数的改进和完善。 PHP是一种嵌入在HTML并由服务器解释的脚本语言。它可以用于管理动态内容、支持数据库、处理会话跟踪,甚至构建整个电子商务站点。它支持许多流行的数据库,包括MySQL、PostgreSQL、Oracle、Sybase、Informix和Microsoft SQL Server。 PHP是能生成动态网页的工具之一。PHP网页文件被当作一般HTML网页文件来处理并且在编辑时可以用编辑HTML的常规方法编写PHP。
  • 95. 19.1.2 使用PHPPHP脚本语言通常是嵌入在HTML页面中的,也就是一个PHP与HTML代码的混合文件。开始了解一个程序语言,常常都会从最简单的“Hello World”开始。在PHP中,输入一个字符串最简单有效的办法就是使用echo关键字。代码如下。 01 02 How to say "Hello, World!" 03 04 05
    06 一个简单的代码。 07
  • 96. 19.2 使用AMFPHP通过AMFPHP,Flex可以与PHP无缝通信。从而可以创建客户端表现力更强的PHP应用程序。
  • 97. 19.2.1 AMFPHP简介Amfphp是PHP的RPC工具,它可以使PHP与下述技术无缝通信: Flash和Flex Remoting JavaScript JSON 和Ajax JSON XML 和XML-RPC 远端程序调用(RPC,Remote Procedure Call)是一种客户端与服务器端交换数据方式。可以调用本地对象的带有不同参数的方法,设置回调并接受调用结果。不用关心发送和接收数据的实现细节。实现细节通常是抽象的,就像在调用本地方法一样。
  • 98. 19.2.2 访问PHP应用程序AMFPHP使用了NetConnection对象的call()方法,访问远程服务器端的PHP程序。在AMF数据编码方式上有两种:AMF0和AMF3。NetConnection对象采用了异步的方式返回访问的结果。
  • 99. 19.3 本章实例:留言本(PHP版)【实例19-1】本示例通过使用AMFPHP开源项目,制作一个简单的留言本。本示例实现了Flex与服务器端技术PHP的通信。
  • 100. 19.4 小结本章主要讲解了Flex与PHP通信问题,同时也简单介绍了PHP语言。本章重点讲解了使用AMF的通信格式,实现Flex与PHP的通信。下一章将会讲解Flex与ASP.NET的通信。
  • 101. 19.5 习题1.什么是PHP? 2.如何使用AMFPHP使得Flex与PHP通信?
  • 102. 第20章 Flex与.NET.NET是微软推出的开发基础框架。功能强大、集成度高、多语言等优点吸引了很多开发者的青睐。对于.NET程序员来讲,Flex和.NET也是一个很好的组合。本章包括以下内容: .NET简介 使用FluorineFx
  • 103. 20.1 .NET简介.NET框架是一个功能强大的开发框架,包含了一套成熟的开发工具Visual Studio.NET。使用.NET框架既可以开发Windows应用程序,也可以开发Web应用程序。
  • 104. 20.1.1 .NET框架.NET框架可以用以下几点描述: .NET框架是为微软新的.net 平台服务的基础结构。 .NET框架是用于构建、开发以及运行Web Service和Web应用程序的公共环境。 .NET框架包含着公用的类库,如ADO.NET、ASP.NET以及Windows窗体,提供可被整合到多种计算机系统的高级标准服务。 .NET 框架是对语言中立的。目前,它支持 C++、C#、Visual Basic、JScript (JavaScript 的微软版本)以及COBOL。第三方语言,如Eiffel、PerlPython、Smalltalk 等等,也将可用于构建未来的.NET 框架应用程序。 新的Visual Studio.NET是用于新的.NET框架的公共开发环境。它提供多功能的应用程序执行环境、简化开发以及多种开发语言之间简易的整合。
  • 105. 20.1.2 ASP.NETASP.NET是统一的Web应用程序平台,它提供了为建立和部署企业级Web应用程序所必需的服务。ASP.NET为能够面向任何浏览器或设备的更安全的、更强的可升级性、更稳定的应用程序提供了新的编程模型和基础结构。 ASP.NET是Microsoft .NET Framework的一部分,是一种可以在高度分布的Internet环境中简化应用程序开发的计算环境。.NET Framework包含公共语言运行库,它提供了各种核心服务,如内存管理、线程管理和代码安全。它也包含.NET Framework类库,这是一个开发人员用于创建应用程序的综合的、面向对象的类型集合。
  • 106. 20.2 使用FluorineFXFluorineFX提供了一个Flex/Flash Remoting的接口,用于访问.NET。使用FluorineFX可以轻易的实现Flex与.NET之间的通信。
  • 107. 20.2.1 安装FluorineFx从官方网站http://www.fluorinefx.com/可以获取免费FluorineFX的程序文件。下载后,就可以安装。
  • 108. 20.2.2 使用FluorineFx创建应用程序【示例20-1】该示例使用FluorineFx创建一个Flex访问ASP.NET的应用程序。
  • 109. 20.3 本章实例:留言本(.NET版)【实例20-1】本示例通过使用FluorineFX开源项目,制作一个简单的留言本。本示例实现了Flex与服务器端技术ASP.NET的通信。
  • 110. 20.4 小结本章主要讲解了Flex与.NET通信的问题,同时还简单介绍了.NET框架以及ASP.NET。本章重点讲解使用FluorineFX项目实现Flex与.NET通信。下一章将讲解Flex与Java的通信技术。
  • 111. 20.5 习题1.什么是.NET? 2.如何使用FluorineFX实现Flex与.NET通信?
  • 112. 第21章 Flex与JavaJava语言是全世界最流行的语言之一,使用者最多,具有跨平台、高性能等特点。丰富的Java开源项目,使得Flex和Java的成为了最佳组合之一。本章包括以下内容: Java简介 开源项目BlazeDS
  • 113. 21.1 Java简介Java语言自诞生之日起,就备受开发者青睐。其具有健壮、可移植性、安全、结构中立等特点。Java拥有大量丰富的开源项目,也大大促进了其发展。
  • 114. 21.1.1 Java语言Java是Sun公司推出的新的一代面向对象程序设计语言,特别适合于Internet应用程序开发,它的平台无关性直接威胁到Wintel的垄断地位。一时间,“连Internet,用Java编程”,成为技术人员的一种时尚。虽然新闻界的报导有言过其实,但Java作为软件开发的一种革命性的技术,其地位已被确立。
  • 115. 21.1.2 Java语言的特点Java到底是一种什么样的语言呢?Java是一种简单的面象对象的分布式的解释的健壮的安全的结构中立的可移植的性能很优异的多线程的动态的语言。 1.简单 2.面向对象 3.分布式 4.健壮 5.结构中立 6.安全 7.可移植的
  • 116. 21.2 开源项目BlazeDSBlazeDS作为Adobe新推出的开源项目,目的是使得Flex客户端程序更好的与远程Java程序通信。BlazeDS主要包含了两种技术:高性能远程控制和短消息技术。
  • 117. 21.2.1 安装和配置BlazeDSBlazeDS是一个开源的项目,是一个基于服务器的Java远程控制(remoting)和Web消息传递(messaging)技术,它能够使得后端的Java应用程序和运行在浏览器上的Adobe Flex应用程序相互通信。
  • 118. 21.2.2 使用BlazeDS 【示例21-1】本示例使用BlazeDS实现Flex与Java互相通信。
  • 119. 21.3 本章实例:留言本(Java版)【实例21-1】本示例通过使用BlazeDS开源项目,制作一个简单的留言本。本示例实现了Flex与服务器端技术Java的通信。
  • 120. 21.4 小结本章主要讲解了Flex和Java通信技术,同时也简单介绍了Java相关知识。本章重点讲解了使用BlazeDS项目实现Flex与Java之间的通信。从下一章开始将讲解有关Flex高级设计知识。
  • 121. 21.5 习题1.什么是Java? 2.如何使用BlazeDS实现Flex与Java的通信?
  • 122. 第22章 PureMVC框架PureMVC是一个定位于高性能RIA客户端的基于模式的框架,所使用的模式,可以在《设计模式:可复用面向对象软件的基础》一书中找到。现在PureMVC已经被移植到大多数流行的开发平台,包括Flash/Flex、PHP、JAVA、C#等。本章将详细讲述在Flex平台中,如何使用PureMVC框架设计高性能的RIA客户端应用程序。本章包括以下内容: PureMVC框架简介 控制中心——Facade类 通信机制 逻辑命令处理——Command类 视图控制——Mediator类 数据模型代理——Proxy类
  • 123. 22.1 PureMVC模式简介MVC模式的通常被分为经典的低耦合三层:Model、View和Controller。在PureMVC中,这三部分由三个单例模式来管理,三者合称为核心层或者核心角色。
  • 124. 22.1.1 MVC模式MVC模式的全称是Model-View-Controller,即“模型-视图-控制器”。MVC模型的框架图如图22.1所示。从图22.1中可以看出整个MVC模式的设计原理。
  • 125. 22.1.2 PureMVC结构在PureMVC中,整个框架都是有三个单例模式来管理。除了这三个核心层之外,还有另外一个单例模式类——Facade。Facade类提供了与核心层通信的唯一接口,以简化开发的复杂度。图22.2显示了PureMVC的整体框架结构。
  • 126. 22.2 控制中心——Facade类Facade类是个单例类,负责对三个核心层的初始化,并访问它们的公共方法。Facade类的作用主要是简化程序开发,提供编程效率。
  • 127. 22.2.1 Facade类Facade类位于包org.puremvc.as3.patterns.Facade中。在PureMVC中,Facade类主要负责以下几项任务: 初始化Model、View和Controller的单例。 提供所有由IModel、IView和IController接口定义的方法。 提供Model、View和Controller单例的重载方法。 提供一个唯一的接口,以便注册Command类和通知观察者。 Facade类可以看作是Model、View和Controller三者的“经纪人”,在实际编写代码时,不需要应用这三者的类文件,或者实例化。Facade类已经在构造方法中包含了对这三者的单例的构造。
  • 128. 22.2.2 创建Facade子类通常情况下,应用程序都会有一个Facade子类。这个子类就负责初始化控制器(Controller),以及建立Command和Notification之间的映射,并执行一个注册所有Model和View的Command类。
  • 129. 22.3 通信机制在PureMVC中使用了观察者模式。通过这种模式,各层之间得以相互通信。
  • 130. 22.3.1 通信机制概述PureMVC使用了观察者模式,所以各层之间能以一种松耦合的方式通信,并且与平台无关。ActionScript语言本身没有提供flash.events包中的事件模型。况且PureMVC框架并不是只针对AS语言,它被移植到其他的一些平台像C#、J2ME,所以它不会使用这些只有在Flash平台上才有的类,它采用自己的通信机制(即Notification)。 Notification(通知)机制并不仅仅是Event(事件)机制的替代品,它们的工作方式有本质上的不同。但这两者相互协作可以提高视图组件的可重用性,甚至,如果设计得当,视图组件可以和PureMVC“脱耦”。
  • 131. 22.3.2 事件(Event)处理Event是由实现IeventDispatcher接口的Flash显示对象广播的,Event会在整个显示对象层中“冒泡”,这样可以让父级(或父级的父级,等)对象处理事件。Event机制是一个“责任链”的形式:除了那些可以直接引用事件发起者(dispatcher)并侦听它事件的对象,只有和dispatcher是父子关系的对象才会接收到事件,并对事件做出响应动作。 Facade和Proxy只能发送Notification,Mediators既可以发送也可以接收Notification,Notification被映射到Command,同时Command也可以发送Notification。这是一种“发布/订阅”机制,所有的观察者都可以收到相同的通知。例如多个书刊订阅者可以订阅同一份杂志,当杂志有新刊出版时,所有的订阅者都会被通知。
  • 132. 22.4 逻辑命令处理——Command类Command中包含了两个类:SimpleCommand和MacroCommand。SimpleCommand类只有一个execute方法,而通过MacroCommand类的addSubCommand可以添加子Command。
  • 133. 22.4.1 Command类ApplicationFacade需要在启动时初始化Controller,建立Notification与Command的映射。
  • 134. 22.4.2 创建Command子类通常情况下,Command子类只是继承SimpleCommand类就可以了。除非业务逻辑相对复杂,这时需要继承MacroCommand类,把多个SimpleCommand子类按照指定的顺序执行。
  • 135. 22.5 视图控制——Mediator类Mediator是视图组件与系统其他部分交互的中介器。使用Mediator类可以做到视图显示与视图控制的分离。
  • 136. 22.5.1 Mediator类Mediator是视图组件(View Component,例如Flex的DataGrid或Flash的MovieClip)与系统其他部分交互的中介器。 在基于Flex的应用程序中,Mediator侦听View Component来处理用户动作和Component的数据请求。Mediator通过发送和接收Notification来与程序其他部分通信。Mediator的主要职责是处理View Component派发的事件和系统其他部分发出来的Notification(通知)。 因为Mediator也会经常和Proxy交互,所以经常在Mediator的构造方法中取得Proxy实例的引用并保存在Mediator的属性中,这样避免频繁的获取Proxy实例。
  • 137. 22.5.2 创建Mediator子类Mediator子类控制着相应的视图组件(View Component),和相应相应的事件,并发送通知。
  • 138. 22.6 数据模型代理——Proxy类Proxy类用来控制和访问数据模型,通过Proxy代理类,可以更新数据模型,并获取数据。
  • 139. 22.6.1 Proxy类一般来说,Proxy Pattern(代理模式)被用来为控制、访问对象提供一个代理。在基于PureMVC的应用程序,Proxy类被设计用来管理程序数据模型。一个Proxy有可能管理对本地创建的数据结构的访问。它是Proxy的数据对象。 在这种情况下,通常会以同步的方式取得或设置数据。Proxy可能会提供访问Data Object部分属性或方法的API,也可能直接提供Data Object的引用。如果提供了更新Data Object的方法,那么在数据被修改时可能会发送一个Notifidation通知系统的其它部分。 Remote Proxy被用来封装与远程服务的数据访问。Proxy维护那些与Remote service(远程服务)通信的对象,并控制对这些数据的访问。 在这种情况下,调用Proxy获取数据的方法,然后等待Proxy在收到远程服务的数据后发出异步Notification。
  • 140. 22.6.2 创建Proxy子类Proxy封装了数据模型,管理Data Object及对Data Object的访问,不管数据来自哪里,什么类型。在PureMVC中,Proxy是个被Model注册的简单的数据持有者。虽然Proxy类已经是完全可用的了,但是通常对于具体的应用应该编写Proxy的子类,增加操作方法。
  • 141. 22.7 本章实例:用户角色管理用户角色管理是用户管理中的重要的一个部分,在角色管理中,可以把用户分派多个角色。按照角色用户可以拥有不同的操作权限。 【实例22-1】本例制作一个用户角色管理功能,其中包含两部分功能,一个是用户的添加,另一个是角色的添加。
  • 142. 22.8 小结本章主要讲解了PureMVC框架。PureMVC框架核心就是采用了广播式的通信机制,接收者只要注册标识与广播消息的标识一致,就会接收消息。由于这种通信机制比较通用,所以PureMVC框架又适合是他语言。
  • 143. 22.9 习题1.什么是PureMVC框架? 2.PureMVC框架的通信机制是什么? 3.PureMVC框架包含多少个设计模式?
  • 144. 第23章 创建AIR程序AIR平台是富互联网技术(RIA)应用之一。AIR允许把已经存在的WEB程序构建并部署成RIA桌面应用程序,以提高用户体验。Flex就是其中一个可以部署到AIR运行时的技术。本章包括以下内容: AIR简介 窗体 菜单 本地SQL数据库
  • 145. 23.1 AIR简介Adobe公司的AIR是一个跨平台的系统运行时,通过AIR技术平台可以把已经存在的Web程序包装成一个桌面程序。
  • 146. 23.1.1 AIR平台概述使用AIR平台构建的应用程序,就像是在使用本地桌面程序一样,有很好的操作体验。AIR运行时只需要在用户的电脑上安装一次,就可以体验不同的AIR应用了。AIR运行时平台的优点可以归结为一下几点: 一次开发,随处运行。因为AIR是一个跨操作系统的平台,同时支持Windows、Linux以及Mac OS等流行的操作系统。 可以快速的构建程序。AIR利用原有的技术构建应用程序,这些技术包括HTML、Flex、Flash、PDF、JavaScript、CSS和Ajax等。所以开发者不必再学习其他新的技术。 AIR提供了诸多接口和框架。通过这些接口和框架,开发者可以轻易的访问本地系统、文件、甚至是数据库。
  • 147. 23.1.2 使用Flex创建第一个AIR程序在Adobe Flex Builder 3中已经提供了创建AIR工程的工具,这个工程带有Flex的AIR组件以及调试器和打包程序。 【示例23-1】本例子使用Flex创建一个简单的AIR程序,通过此例读者可以了解到如何使用Flex创建AIR程序。
  • 148. 23.2 窗体窗体(Windows)是AIR程序的基础部分。无论一个AIR程序多么简单,但还是需要有窗体,否则就不能够运行起来。本章将会介绍AIR中窗体的创建。
  • 149. 23.2.1 窗体简介在使用Flex创建AIR工程时,系统会自动的创建一个窗体组件WindowedApplication。所有的容器和组件都会包含在这个窗体中。在创建AIR程序的同时,系统还会创建一个XML配置文件,如main-app.xml。在这个配置文件中,记录了窗体的属性、图标和外观样式等。其中比较常用的属性有如下几项: filename:应用程序的名称。 version:版本号,其值的形式如v1、2.5或者Alpha 1等。 copyright:版权信息。 systemChrome:程序边框样式,可选值为standard或者none。standard为带有系统边框的窗体,none则为自定义边框。
  • 150. 23.2.2 窗体事件通过设置窗体边框属性systemChrome的值,可以创建一个不规则的窗体。不规则窗体默认情况下是没有最大化、最小化和关闭等按钮的,需要自己创建并实现其功能。
  • 151. 23.3 菜单AIR程序可以创建各种不同的菜单,如顶部菜单、右键上下文菜单、系统托盘菜单等。在本节中,将会详细讲解如何在AIR程序中创建不同的类型菜单。
  • 152. 23.3.1 系统菜单系统顶部菜单通常起到导航的作用。AIR程序的所有菜单类都包含在flash.display.NativeMenu包中。通过构建一个新的NativeMenu对象,就可以创建一个菜单,构造参数没有任何的参数。 【示例23-3】本例子创建一个系统顶部菜单,并且在顶级菜单的下面又使用NativeMenuItem对象创建了二级菜单。
  • 153. 23.3.2 右键菜单在基于Flex技术的AIR程序中,可以在任何地方显示一个单击右键的上下文菜单。要创建一个上下文菜单,需要创建一个ContextMenu对象,并把该对象分派到contextMenu属性中。
  • 154. 23.3.3 托盘菜单AIR程序默认在windows系统中支持系统托盘图标,并可以创建一个系统托盘的菜单。
  • 155. 23.4 本地SQL数据库在AIR程序中默认已经包含了一个本地的SQL数据库。这个SQL数据库使用了开源的SQLite数据库系统,支持大多数标准的SQL特性。通过操作本地的SQL数据库,可以完成很多创造性的功能。例如,可以通过把数据暂时保存在本地,实现离线操作的功能。
  • 156. 23.4.1 创建和打开数据库要创建一个数据库,首先要创建一个SQLConnection对象。使用open()方法可以以同步的方式打开数据库,或者使用openAsync()方法以异步的方式打开。使用两种方式都会有一个File类型的参数,在创建参数的同时,会在本地创建一个以db为扩展名的数据库文件。
  • 157. 23.4.2 创建数据表在数据库中创建数据表,可以通过执行SQL语句的方法实现。创建数据表的SQL语句语法参见如下形式。 CREATE TABLE tableName (column[, column, ...]) 在打开数据库之后,可以使用SQLStatement对象来执行某个SQL语句。
  • 158. 23.4.3 插入数据数据是保存在数据表中的,在创建了数据表之后,下一步就要向数据表中添加数据。插入数据可以使用SQL语言中的INSERT命令。该命令的语法结构如下所示。 INSERT INTO tableName (column[, column, …]) VALUES (value[, value, …])
  • 159. 23.4.4 读取数据读取数据同样使用了SQL语句,通过SQLStatement对象的execute()方法获取数据的结果集。
  • 160. 23.5 本章实例:RSS阅读器RSS阅读器是一种信息聚合的技术,是为了提供一种更为方便、高效的互联网信息的发布和共享,用更少的时间分享更多的信息。
  • 161. 23.6 小结本章主要讲解了如何创建AIR程序,其中包括了窗体、菜单以及本地数据库操作等。下一章将会讲解使用如何Flex开发一套完整的应用系统。
  • 162. 23.7 习题1.什么是AIR平台? 2.如何创建一个不规则窗体? 3.如何创建一个菜单? 4.如何在AIR平台中操作本地数据库?
  • 163. 第24章 使用Flex创建MP3播放器使用Flex平台不仅可以创建交互式的管理系统,还可以创建多媒体应用程序,如MP3播放器、FLV流媒体播放器等。本章将以一个完整功能的MP3播放器为例,详细讲述如何使用Flex创建一个多媒体程序。本章包括以下内容: MP3播放器的界面设计 歌曲列表功能设计 基本播放功能设计 显示进度功能设计 音量控制功能设计
  • 164. 24.1 总体和界面设计在创建一个应用程序之前,往往是需要对整体的功能有一个规划和设计。在这个MP3播放器中,可以看见最常用的功能,包括播放、暂停、停止、音量控制、播放进度显示等。本节将会对这个MP3播放器有一个整体功能和界面的设计。
  • 165. 24.1.1 总体功能设计MP3播放器通常最核心的功能就是播放、暂停和停止。除了这些还可以有歌曲列表、音量控制和现实播放进度等。本章所讲述的MP3播放器就包含了上述这些功能。最终,希望MP3播放器的界面效果可以类似于图24.1所示。
  • 166. 24.1.2 总体框架设计总体设计还是使用PureMVC框架。其目录结构可以参考如图24.2所示。
  • 167. 24.1.3 播放进度设计显示播放进度可以使用Flex中提供的ProgressBar控件。该控件提供了实时显示一个任务的完成情况,使用最多的是加载数据。使用ProgressBar控件可以很容易的实现显示播放进度的功能。代码如下。 01 02 03 04 05
  • 168. 24.1.4 播放控制界面设计播放器最核心的功能就是播放控制了。播放控制通常包括播放、暂停和停止功能。要实现这些功能,通常首先想到的应该是通过触发按钮控件的单击事件。 除了使用按钮控件外,还可以使用图像Image控件来设计。使用图像Image控件来设计此功能主要是考虑到与美工设计的分离,使用美工设计的按钮图标,可以获得更加专业的视觉体验。 除了这几个核心的功能之外,还增加了一个音量控制功能。在这里,通过使用HSlider控件的change事件改变数值来实现音量的控制。
  • 169. 24.1.5 歌曲列表设计在连续播放多个音乐或者专辑的时候,播放列表是非常有用的。一般来说,在Flex平台中,数据列表都会使用诸如List、DataGrid等数据控件。这个列表因为是由三个字段,所以选择DataGrid数据控件来显示歌曲列表。
  • 170. 24.2 歌曲列表功能设计歌曲列表功能相对简单,只是从外部XML文件中读取相关数据,并显示在DataGrid控件中。在这里使用的是XML格式的数据,在实际开发中可能会使用各种数据库(如MySQL、MS SQLSERVER等),其原理都是一样的。
  • 171. 24.2.1 创建数据和对象模型在编写代码之前首要的工作就是创建一个XML文件,并填充一些数据,作为示例数据。使用记事本或者其他的文本工具创建一个XML文件。
  • 172. 24.2.2 读取歌曲列表通过使用URLRequest和URLLoader对象,可以加载并读取外部的XML对象。在读取数据之后,需要把这些数据统一的保存到一个数组集合的对象中,这样便于管理,并且可以使得数据控件容易绑定。
  • 173. 24.2.3 显示歌曲列表要在DataGrid控件中显示歌曲列表,还需要设置DataGrid控件的dataProvider属性,并创建一个数组集合类型的变量songs。
  • 174. 24.3 播放控制功能设计播放控制功能是播放器程序中最核心的应用。播放控制功能主要包括播放、暂停和停止。除此之外还可以有音量控制、歌曲切换播放以及播放进度快进和后退等。
  • 175. 24.3.1 播放控制当用户单击播放按钮的时候,系统将会响应操作并调用事件函数。
  • 176. 24.3.2 暂停控制在ControlBoard中的暂停按钮中添加一个单击click事件。该事件指向controlHandle方法,并传递参数PAUSE的值作为消息的标识。
  • 177. 24.3.3 停止控制停止控制功能与上述两个功能类似。首先修改ControlBoard代码。创建一个静态常量用作事件发送的标识。
  • 178. 24.3.4 歌曲切换为了达到更好的用户体验,当单击歌曲列表中的任意歌曲时,就会自动播放选中的歌曲。首先来看一下SongListBoard中的实现。 SongListBoard是歌曲列表的视图,在其中的DataGrid控件中,添加一个单击click事件。在单击事件的同时,需要获取选中项的值。
  • 179. 24.4 显示进度功能设计显示进度功能在播放器也是很常见的。显示播放进度的方法有很多,如根据当前位置和总时间绘制动画图形。本节为了主要说明此功能的实现,就直接使用ProgressBar控件。
  • 180. 24.4.1 显示播放进度在前面24.1.3中,已经介绍了显示进度的设计界面。本节将会在这个基础上实现实时显示进度的功能。 创建一个ProgressMediator类。在此类中首先要侦听播放动作的消息广播,然后使用ENTER_FRAME事件,根据当前位置和音频的总长度来实时显示播放进度。
  • 181. 24.5 音量控制功能设计音量控制功能的实现主要是依靠SoundTranform类。其中使用SoundTranform类的volume属性可以设置音频流的音量大小。
  • 182. 24.5.1 音量控制修改ControlBoard.mxml文件的Hslider控件,添加change事件。
  • 183. 24.5.2 静音控制有了音量控制的基础后,静音控制就相对简单了。只要把SoundTransform对象的属性volume的值设置成0即可。
  • 184. 24.4 小结本章主要讲解了如何使用Flex创建一个完整的MP3播放器应用系统。本章的播放器程序采用了PureMVC的框架设计,实现了大部分常用的功能。通过本章的学习,读者可以深入了解到Flex在实际开发项目中的作用,可以举一反三,对读者在实际项目的开发中有着指导作用。
  • 185. (本页无文本内容)