×
文章路径: Flex

Flex全屏以及获得显示器分辨率

发表于3年前(Dec 24, 2014 9:25:49 AM)  阅读 696  评论 0

分类: Flex

标签: Capabilities StageDisplayState 全屏 分辨率

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

AC_FL_RunContent(
		"src", "playerProductInstall",
		"FlashVars", "MMredirectURL="+MMredirectURL+'&MMplayerType='+MMPlayerType+'&MMdoctitle='+MMdoctitle+"",
		"width", "${width}",
		"height", "${height}",
		"align", "middle",
		"id", "${application}",
		"quality", "high",
		"bgcolor", "${bgcolor}",
		"name", "${application}",
		"allowScriptAccess","sameDomain",
		"allowFullScreen","true",
		"type", "application/x-shockwave-flash",
		"pluginspage", "http://www.adobe.com/go/getflashplayer"
	)

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、获取不到次显示器的分辨率。前一点可能是由于某种安全原因,后一种我觉得实在不应该,希望后续版本会有所改进。

发表评论