Flex mobile 翻转屏幕

利用stage.setAspectRatio(StageAspectRatio.LANDSCAPE) 这个事横屏的切换

stage.setAspectRatio(StageAspectRatio.PORTRAIT) 这个是竖屏的。


下列 API 仅在移动设备上的 AIR 应用程序中可用。当前在 Flash Player 或 AIR 的桌面版本中不可用。

屏幕方向 API

屏幕方向 API 允许使用舞台方向和 iPhone:

  • Stage.autoOrients — 应用程序是否设置为使舞台随设备旋转自动重新取向。当在 Flash Professional CS5“iPhone 设置”话框中选择“自动方向”选项时,此属性将设置为 true。(也可以在应用程序描述符文件中将 autoOrients 元素设置为 true。)请参见 iPhone 应用程序设置。可通过为 Stage 对象添加 orientationChanging 事件侦听器来取消自动重新定向。调用此事件对象的 preventDefault() 方法可取消自动重新定向。

    在使用“自动方向”时,为获得最佳效果,应按照如下所示设置舞台的 align 属性:

    stage.align = StageAlign.TOP_LEFT; 
    stage.scaleMode = StageScaleMode.NO_SCALE;
  • Stage.deviceOrientation — 设备的物理方向。StageOrientation 类定义此属性的值。

  • Stage.orientation — 舞台的目前方向。StageOrientation 类定义此属性的值。

  • Stage.supportsOrientationChange — 在 iPhone 中设置为 true ,在 AIR 应用程序中设置为 false

  • Stage.setOrientation() — 设置舞台的方向。此方法包含一个参数,该参数是一个定义新舞台方向的字符串。StageOrientation 类中的常量用于定义此参数的可能值。

  • StageOrientation — 定义舞台方向值。例如,StageOrientation.ROTATED_RIGHT 表示舞台相对于设备的默认方向向右旋转。

  • StageOrientationEvent — 定义当屏幕方向更改时舞台调度的事件。当用户旋转 iPhone 时发生此事件。有两种类型的事件。当设备旋转时,Stage 调度orientationChanging 事件。要防止舞台重新取向,则调用 orientationChanging 事件对象的 preventDefault() 方法。舞台重新取向完成后,Stage 将调度 orientationChange 事件。

当前,屏幕方向 API 仅在移动设备上的 AIR 应用程序中可用。如果移动 AIR 应用程序和桌面 AIR 应用程序共享源代码,请使用Stage.supportsOrientationChange 属性来检查是否支持 API。

以下示例显示如何响应旋转设备的用户:

stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, 
            onOrientationChange); 
 
function onOrientationChange(event:StageOrientationEvent):void 
{ 
    switch (event.afterOrientation) { 
        case StageOrientation.DEFAULT: 
            // re-orient display objects based on 
            // the default (right-side up) orientation. 
            break; 
        case StageOrientation.ROTATED_RIGHT: 
            // Re-orient display objects based on 
            // right-hand orientation. 
            break; 
        case StageOrientation.ROTATED_LEFT: 
            // Re-orient display objects based on 
            // left-hand orientation. 
            break; 
        case StageOrientation.UPSIDE_DOWN: 
            // Re-orient display objects based on 
            // upside-down orientation. 
            break; 
}

在此示例中,出现不同的舞台方向时,将显示注释而不是功能代码。

您可以通过调用 Stage 对象的 setOrientation() 方法来更改舞台的方向。设置方向是一种异步操作。您可以通过侦听 orientationChange 事件来检查取向完成的时间。以下代码显示如何将舞台设置为向右:

stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, 
            onOrientationChange); 
stage.setOrientation(StageOrientation.ROTATED_RIGHT); 
 
function onOrientationChange(event:StageOrientationEvent):void 
{ 
    // Code to handle the new Stage orientation 
}

舞台在旋转时会进行大小调整,并且 Stage 对象将调度 resize 事件。您可以调整显示对象大小,并将其重新定位在舞台上,以响应 resize 事件。

NativeApplication.systemIdleMode 和 SystemIdleMode

借助 NativeApplication.systemIdleMode 属性,您可以阻止 iPhone 进入闲置模式。默认情况下,如果一段时间内没有触摸屏交互,iPhone 将进入闲置模式。闲置模式可以导致屏幕变暗,也可以导致 iPhone 进入锁定模式。此属性可以设置为下列值之一:

  • SystemIdleMode.NORMAL — iPhone 执行标准闲置模式行为。

  • SystemIdleMode.KEEP_AWAKE — 应用程序尝试阻止 iPhone 进入闲置模式。

仅在移动设备上支持此功能。在桌面操作系统上运行的 AIR 应用程序不支持此功能。对于在桌面上运行的应用程序,设置 NativeApplication.systemIdleMode属性不起任何作用。

以下代码显示如何禁用 iPhone 闲置模式:

NativeApplication.nativeApplication.systemIdleMode = SystemIdleMode.KEEP_AWAKE;


最近研究了一下flex全屏操作,flex全屏很简单,修改stage.displayState的状态值就行,stage.displayState==StageDisplayState.FULL_SCREEN就是表示全屏,stage.displayState = StageDisplayState.NORMAL;就是表示恢复全屏前的状态。不过事先要在index.template.html模板文件的AC_FL_RunContent变量里面增加两个键值对,为”allowScriptAccess”,”sameDomain”, “allowFullScreen”,”true”,修改后的文件为,注意,有两处:

01 AC_FL_RunContent(
02                 "src""playerProductInstall",
03                 "FlashVars","MMredirectURL="+MMredirectURL+'&MMplayerType='+MMPlayerType+'&MMdoctitle='+MMdoctitle+"",
04                 "width""${width}",
05                 "height""${height}",
06                 "align""middle",
07                 "id""${application}",
08                 "quality""high",
09                 "bgcolor""${bgcolor}",
10                 "name""${application}",
11                 "allowScriptAccess","sameDomain",
12                 "allowFullScreen","true",
13                 "type""application/x-shockwave-flash",
14                 "pluginspage""http://www.adobe.com/go/getflashplayer"
15         )

代码结束符!

flex还可以将局部进行全屏,在全屏前设置stage.fullScreenSourceRect = new Rectangle(0,0,320,240);再调用stage.displayState==StageDisplayState.FULL_SCREEN后,flex将会把播放器中选定的矩形进行全屏缩放。不过我测试时,感觉缩放效果不好,于是自己根据应用场景做了一下改进。原理是这样的,在flex全屏或退出全屏时,舞台会发出全屏事件(FullScreenEvent.FULL_SCREEN),我们给舞台加上全屏事件监听,当全屏时,我们帮不需要显示的面板空间设置隐藏,只显示我们关注的部分,退出全屏时,再显示出来,这样也就达到了全屏的目的,用户体验效果也不错,当然这不适用所有场景。

进一步测试发现,在全屏状态下,竟然不支持键盘操作,查看API发现,原来StageDisplayState是有三种状态,FULL_SCREEN:指定舞台处于全屏模式。在此模式下禁用键盘交互性操作;FULL_SCREEN_INTERACTIVE:指定舞台处于启用键盘交互性操作的全屏模式。只有 AIR 应用程序支持此功能;NORMAL:指定舞台处于标准模式。坑爹的FULL_SCREEN_INTERACTIVE只有AIR才支持键盘交互,所以使用该方法全屏后,除了按ESC键退出全屏外,别的键盘操作一律无效。

接下来再讲下如何获得显示器分辨率,原来API中有Capabilities这么个类,里面就包含了很多用户的设备信息,都是静态常量,如操作系统类型,是否有麦克风,有摄像头等,其中就有显示器的分辨率大小,screenResolutionX,screenResolutionY就是用户显示器的分辨率。经测试,我发现竟然获得的值不对,再详细看了下API,screenResolutionX:指定屏幕的最大水平分辨率。服务器字符串为 R(它返回屏幕的宽度和高度)。此属性不会随用户的屏幕分辨率而更新,而仅指示 Flash Player 或 Adobe AIR 应用程序启动时的分辨率。而且,该值仅指定主显示器。 有两个重点,1、仅指示启动时的分辨率,及如果启动后分辨率改了,获得的还是之前的值。2、仅指主显示器。而我正好用了两个显示器,一般用大显示器调程序,然后悲剧的事就发生了…

总体来说,flex这有两个不足,1、flex全屏下静止键盘输入;2、获取不到次显示器的分辨率。前一点可能是由于某种安全原因,后一种我觉得实在不应该,希望后续版本会有所改进。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值