- 浏览: 14543 次
最新评论
Adobe Flash Builder 4 简体中文正式版 Windows版点击下载:、http://g.csdn.net/5134151
Adobe Flash Builder 4 简体中文正式版 Mac版点击下载:http://g.csdn.net/5134152
Adobe 在线课堂:http://adobev.csdn.net/zx/index.html
Adobe平台技术峰会课程视频:http://adobev.csdn.net/ Flex Mobile现在融合了本地Android API的大部分内容及功能,从加速表,到工具栏,到传声器,构建一个本地化感觉的程序所需大部分功能都能轻松执行。有个例外就是缺省菜单组件。只要用户点击菜单按钮(在Android电话上的标准设置),这个菜单通常在屏幕底部就可见,并且包含一个程序特定菜单或根据用户使用的屏幕设计的特定菜单。Flex Mobile现在只有beta版,但是这个功能确定会出现在Android的路线图中,可能在完整版发出之前。同时,我将向你展示在Flex Mobile上执行"本地"菜单的一个方法。我最近为Flex Mobile构建了一个这样的菜单,作为我的MAX Volume项目的一部分。MAX Volume是一个"social jukebox",移动程序用户可浏览音乐库,并且选择他们想要听的下一首歌曲。我们的菜单首先用来在不同的视窗之间导航,每个视窗可以让用户整理或者根据个人喜好浏览音乐库。如需了解更多相关信息,你可以从Adobe TV上的Adobe MAX上阅读我们关于这个项目的presentation,并且可以了解更多此高级项目的信息,及如何开始使用Flex Mobile。现在,我们开始这个Menu对象的制作。首先,你需要观察用户何时会点击Menu菜单。Menu现在在keyboard对象上是一个key,所以监听菜单事件很简单:
this.view.addEventListener(KeyboardEvent.KEY_DOWN, _onKeyDown);
监听功能: private function _onKeyDown(event:KeyboardEvent):void { if (event.keyCode == Keyboard.MENU) { //code to handle the menu event goes here } } 在通常的网络或桌面程序中,这就是你需要的-监听事件,构建你的菜单对象。Flex Mobil增加了复杂度,因为程序基本上是一个ViewStack对象,这就意味着你可能在任何给定时间有诸多不同的可视屏幕中的一个(只有一个)屏幕。你可以在每个屏幕上执行你的菜单(作为组件),但是这不是最理想的状态。大部分程序只需要一个全局菜单,及在需要高级菜单功能的单个屏幕上覆盖它的功能。全局菜单应该被执行一次,并且可从任何地址读取-重新执行该功能,即使它被构件化,"耗费"了我们为移动设备编程时,不能浪费的内存。那么,哪里放置菜单处理器?在Flex Mobile中,基本程序对象是MobileApplication。它就在这里,我们将定义全局actionBar内容(屏幕顶部;程序标题),如一个标题或程序logo .我认为,这也是为什么要监听菜单事件,执行我们的Menu对象。在MAX Volume 中,我们使用Robotlegs micro-architecture, 因此我们实际上要加入所需代码,以监听主程序mediator class中的Menu点击事件。这个mediator包含一个对主MobileApplication类的参考,它负责构建Menu对象,将它插入在现用视窗的元素列表中。我的完整方法包括处理器,以覆盖后端和搜索按钮,所以如下所示: private function _onKeyDown(event:KeyboardEvent):void { if (event.keyCode == Keyboard.BACK) { event.preventDefault(); } else if (event.keyCode == Keyboard.MENU) { event.preventDefault(); view.toggleMenu(); } else if (event.keyCode == Keyboard.SEARCH) { event.preventDefault(); } } event.preventDefault(); 调用,当按钮按下时,阻止任何可能执行的内置Android功能。Back键可能导致Android系统"返回",而"search"键可能执行全局搜索功能。阻止这些事件超出我们程序的控制,这样我们就可以有效地把它们控制在我们的上下文背景中。回到主MobileApplication视窗对象,触发菜单的代码比较复杂。首先,我们需要将菜单从其它视窗移走。如果在不同的视窗中,菜单被打开,我们需要确保将菜单挪到我们现在的视窗前关闭该菜单。下一步,我们需要根据菜单的状态隐藏或显示视窗。为此,我首先试图移走菜单。我使用了状态变量以跟踪最后发布菜单的视窗。有可能菜单不能移走,我会处理这个错误。当然,现在我没有在处理器中进行任何操作。我还使用了一个状态变量跟踪菜单是否可视。这个将菜单移走的过程在部分程度上重新设置了状态变量。
public function toggleMenu():void {
//if the menu is visible but not on the current view, hide it and then show it again
if (menuView != null && menuView != this.navigator.activeView) {d
try {
removeMenu();
} catch (e:Error) {}
showMenu();
} else if (menuVisible) {
hideMenu();
} else {
showMenu();
} }private function removeMenu(event:Event = null):void { menuView.removeElement(menu); menuVisible = false; } 在空的处理器中找出错误显然不是最佳策略。不过在开发过程中,我还是看到过此类错误。它没什么意义,不过是beta框架中的一个bug。菜单还是被移走了。我认为现在代码就不需要什么修改了。下一步,来看看我如何展示和隐藏菜单对象。 public function hideMenu():void { menuView.removeElement(menu); menuVisible = false; } public function showMenu():void { menuView = this.navigator.activeView; menu.y = menuView.height - menu.height; menuView.addElement(menu); menuVisible = true; } 这就是了。我在这个案例中执行的真实的菜单对象是一个简单的群对象,其中有四个按钮。菜单本身被调停(根据Robotlegs最佳策略),而这个mediator负责监听菜单中不同按钮上的点击事件。每个按钮将不同的视窗推入到主菜单导航栏中,这样我们的菜单就可只用于导航了。菜单对象的代码如下所示: flex/spark" height="209" width="100%"> height="100%" width="100%"> height="100%" width="100%"> height="100%" width="100%" label="Songs"/> height="100%" width="100%" label="Now Playing"/> height="100%" width="100%"> height="100%" width="100%" label="Albums"/> height="100%" width="100%" label="Artists"/> 我的menu mediator: package com.effectiveui.maxpower.mobile.application.views. components { import com.effectiveui.maxpower.mobile.application.models .MobileMusicModel; import com.effectiveui.maxpower.mobile.application.views. AlbumsView; import com.effectiveui.maxpower.mobile.application.views. ArtistsView; import com.effectiveui.maxpower.mobile.application.views. SongsView; import flash.events.Event; import flash.events.MouseEvent; import mx.collections.ArrayCollection; import org.robotlegs.mvcs.Mediator; import spark.components.View; public class MenuMediator extends Mediator { [Inject] public var view:Menu; [Inject] public var musicModel:MobileMusicModel; override public function onRegister():void { eventMap.mapListener(view.artistsBtn, MouseEvent.CLICK, onArtists); eventMap.mapListener(view.albumsBtn, MouseEvent.CLICK, onAlbums); eventMap.mapListener(view.songsBtn, MouseEvent.CLICK, onSongs); eventMap.mapListener(view.nowPlayingBtn, MouseEvent.CLICK, onNowPlaying); } private function onArtists(event:Event):void { (view.parent as View).navigator.popToFirstView(); (view.parent as View).navigator.pushView(ArtistsView); } private function onAlbums(event:Event):void { (view.parent as View).navigator.popToFirstView(); musicModel.currentAlbums = musicModel.safeAlbums; (view.parent as View).navigator.pushView(AlbumsView); } private function onSongs(event:Event):void { (view.parent as View).navigator.popToFirstView(); musicModel.currentAlbums = null; musicModel.currentSongs = musicModel.musicFiles; (view.parent as View).navigator.pushView(SongsView); } private function onNowPlaying(event:Event):void { (view.parent as View).navigator.popToFirstView(); } } } 有了这个系统,你的菜单就可以真正地包含任何来自简单的导航按钮的内容了,就如同那些高级UI组件,有自己的互动性。
发表评论
-
转贴 有关js 函数验证和字符串查找替换的方法
2012-07-06 09:52 667/* ************************** ... -
正则表达式JS变量
2012-07-06 09:45 612str="苹果有大苹果小苹果之分"; ... -
java正则表达式学习
2012-07-06 09:37 659正则表达式的基础: 表达式 说明 \t 制表符. ... -
HL7 Message examples
2012-07-06 09:30 1095i am now in university(HIT@We ... -
mantis附件图片预览
2012-07-05 20:45 1195mantis在bug详情查看页面里,可以查看bug关联的附 ... -
UML建模图组件库,软件设计,UML绘制 ,打印,自动代码产生,软件,VC++,VB,控件源程序
2012-07-03 13:43 886UML建模图组件库,软件设计,UML绘制 ,打印,自动 ... -
探究 Flex 组件的生命周期
2012-07-02 12:15 614简介: 最为新一 ... -
在Eclipse下使用Ant编译Flex程序
2012-07-02 12:15 583我的机器内存1G,如果使用Eclipse Flex插件编译 ... -
flex与mysql交互
2012-07-02 12:14 670这个小例子通过remoteobject的通讯方法。实现fl ... -
实现FLEX 通过AMF跟PHP通信
2012-07-02 12:14 550AMF flex一种远调用 ... -
Flex引擎
2012-07-01 09:48 806游戏引擎 1、FFilmation 是一个2.5D游 ... -
Ant Flex project 应用
2012-07-01 09:48 703写一个Ant脚本,xml大 ... -
Flex 拖拽范例
2012-07-01 09:48 711Flex由于在其Framwork里加入了DragDrop管 ... -
myeclipse6.5+flex 3 + tomcat6.0 + ds-console.war环境搭建
2012-07-01 09:48 724安装环境:myeclipse6 ... -
探究 Flex 组件的生命周期
2012-07-01 09:48 500简介: 最为新一 ... -
[转载]【笔记本电脑报价】笔记本电脑
2012-06-30 16:11 722[转载]【笔记本电脑报 ... -
[转载]Android原生(Native)C开发之四:SDL移植笔记
2012-06-30 16:11 708[转载]Android原生(Native)C开发之四:SDL移 ... -
[转载]人力资源管理师(二级)复习笔记-第三章 培训与开发
2012-06-30 16:11 726[转载]人力资源管理师( ... -
[转载]《0岁潜能开发 开发无限能力的ESP教育法》笔记
2012-06-30 16:11 676[转载]《0岁潜能开发 开发无限能力的ESP教育法》笔记 ...
相关推荐
创 建过Java多语言本地化应用的朋友应该都很熟悉Java的本地...要本地化Flex2应用,我们需要将本地化资源文件编译为SWC库文件,然后在Flex应用中使用ActionScript或者MXML访问资源集(resource bundles )中的本地化值。
FLEX 鱼眼菜单,点击菜单3D旋转效果切换页面
flex常用的几种动态菜单
Flex自定义右键菜单
flex 自定义右键菜单 多级右键菜单flex 自定义右键菜单 多级右键菜单flex 自定义右键菜单 多级右键菜单
Flex Mobile ANE Hello实例源代码,包括Android Native Java工程源代码,Flex库工程源代码代码和Flex手机工程源代码,打包脚本,实现Android手机振动,Flash Builder 4.6编译,测试通过。
使用Flex ,AS,实现的适用于Flex Mobile平台的对话框。
Flex屏蔽浏览器系统右键,实现自定义Menu的右键菜单,支持XML格式的多级菜单,以及支持菜单出现位置的自适应。欢迎大家修改,(能给出如何恢复浏览器右键菜单最好)。
Flex4的菜单滑动效果,可以参考一下,move特效的使用方法
在xml中配置好一级菜单的图片路径,二三级菜单名称,即可生成多级系统菜单
Mobile FLEX上百度map的试用。包括加载地图,加载标签,加载标注,加载圆、线、面等(需先把BMap.swc文件复制到flex项目的lib目录里)
描述了怎样把Flex组件保存为本地png图片
flex 鱼眼菜单flex 鱼眼菜单flex 鱼眼菜单flex 鱼眼菜单
Flex右键菜单 flex tree 右键菜单 导入eclipse可直接用。我使用的flex sdk 版本是flex4.5.1,更改为4.0可直接使用。
flex中文帮助flex中文帮助flex中文帮助flex中文帮助
百度地图 Flex 移动版本,包括swc包和一个测试示例。
flex4.5 移动开发(mobile)教程 看到别人收的分高的过分,我下载下来象征性的收一分。
Flex实现的走马灯菜单,感觉很爽,可循环,菜单,菜单,菜单;循环,循环,循环。
Flex添加右键菜单,只是文档,里边有描述性的代码
FLEX 3DMENU 3D菜单 特效 特效 3D菜单 3DMENU FLEX