加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex 4 stage.scaleMode 详解 (第一部分:Flex桌面项目)

发布时间:2020-12-15 03:35:24 所属栏目:百科 来源:网络整理
导读:桌面Flex项目: 影响桌面Flex项目缩放方式的因素有4个:初始窗口尺寸、SWF尺寸、stage.scaleMode、stage.align。 桌面程序的初始窗口尺寸在app.xml中通过修改width、height节点值来设置。如省略设置,则默认窗口尺寸为508×409 (除去窗口镶边和标题栏的尺寸

桌面Flex项目:

影响桌面Flex项目缩放方式的因素有4个:初始窗口尺寸、SWF尺寸、stage.scaleMode、stage.align。

桌面程序的初始窗口尺寸在app.xml中通过修改width、height节点值来设置。如省略设置,则默认窗口尺寸为508×409(除去窗口镶边和标题栏的尺寸,内容尺寸为500×375)

SWF尺寸,通过在主Application中添加 如下元数据便签 来设置

< fx:Metadata >
???? [SWF(width=800,height=600,backgroundColor=0xcccccc]
</ fx:Metadata >

或在Flex项目属性――Flex编译器――附加的编译器参数中 添加 -default-size 800 600?

(默认颜色用?-default-background-color=0xCCCCFF)来设置,省略设置,则默认SWF尺寸为500×375

注:Flex项目中,Application的initialize和creationComplete事件处理函数中,this.stage均为null,要设置stage.align和stage.scaleMode,必须通过systemManager.stage.align和systemManager.stage.scaleMode来设置,下文中,凡是对stage相关属性的设置,实际代码均写为systemManager.stage.xxxx=xxxx,简写为stage.xxxx=xxxx,后文不再赘述。


1、窗口尺寸、SWF尺寸、stage.align、stage.scaleMode缺省设置(使用默认值)

当省略设置窗口尺寸和SWF尺寸时,窗口尺寸默认为508×409,SWF尺寸(Stage尺寸)、Application尺寸自动填满窗口内部区域(即窗口尺寸减去窗口镶边和标题栏后的尺寸)为500×375

默认的对齐和缩放方式如下:

stage.align=StageAlign.TOP_LEFT(“TL”),

stage.scaleMode=StageScaleMode.NO_SCALE(“noScale”)

在默认的缩放(“noScale”)和对齐模式(“TL”)下,当拖动窗口边沿、点击最大化/最小化/还原按钮 改变窗口尺寸时,stage会调度Event.RESIZE事件,SWF(舞台)尺寸、Application尺寸会填满为新的窗口大小减去窗口镶边后的尺寸

使用stage.displayState=StageDisplayState.FULL_SCREEN_INTERACTIVE;让窗口全屏,stage同样也会调度Event.RESIZE事件。舞台尺寸刷新为全屏后的显示器尺寸。

舞台上的元素不会随舞台(窗口)尺寸的改变而改变尺寸和位置。


2、窗口尺寸、SWF尺寸、stage.scaleMode缺省设置,stage.align设置为"TL"以外的值。

当省略设置窗口尺寸和SWF尺寸时,窗口尺寸默认为508×409,SWF尺寸(Stage尺寸)、Application尺寸自动填满窗口内部区域(即窗口尺寸减去窗口镶边和标题栏后的尺寸,标题栏30px + 窗口底边4px =34px,左边+右边=8px)为500×375

在默认缩放(“noScale”),对齐模式设置为“TL”以外的值时,改变窗口尺寸,则SWF(舞台)尺寸、Application尺寸仍自动填满窗口内部尺寸,但SWF的对齐方式似乎存在Bug,选T、TR时,SWF内容总是存在一个向右的偏差,选BL、L时,存在向下的偏差,选R、B、BR、“(空字符串默认)”时,存在向右下的偏差

存在偏差的原因可能是,当align不为“TL”时,程序窗口假定SWF内容的尺寸仍为其初始值(500×375),并按这个尺寸来定位SWF内容的位置,例如,对齐模式选“T”(顶部居中),拖动改变窗口大小为598×484时,窗口内容区域尺寸为590×450,程序窗口仍假定SWF内容尺寸为其初始值500×375,按着个值计算,SWF内容被定位到了窗口内容区域的(45,0)的位置,如下图

wKiom1RSDsfCNNDeAAKbb1i2pFc652.jpg

但实际上SWF尺寸、Application尺寸已经改变为590×450,和窗口内容区域一样大小,所以程序窗口对SWF内容的定位不是我们所期望的值。

因为缩放模式为noScale,所以改变窗口尺寸,SWF的内容无缩放。


3、窗口尺寸、SWF尺寸缺省设置,stage.scaleMode选noScale以外的值,stage.align选择不确定的值

改变窗口尺寸时,stage.stageWidth|stageHeight的值并不改变,仍为初始的默认值(500×375),但Application尺寸却会自动改变填充窗口内容区域。Stage不会调度Event.RESIZE事件。

showAll时,由于与上述类似的原因,在对齐模式选择 T、TR、默认、B、BR、R,SWF内容会有向右的偏移。

noBorder由于会显示全部SWF内容,所以偏移现象不明显,但实际上仍有偏移。

exactFit由于会拉伸尺寸到整个窗口,所以不会看到偏移,align选择任何值也不会改变SWF内容的位置(因为已经铺满整个窗口了,位置固定为[0,0])


4、窗口尺寸设置为固定值(如808×634),SWF尺寸设置为固定值(如400×300)

Stage、Application初始尺寸自动填满窗口内容区域,尺寸为800×600

SWF尺寸为设置的值400×300(如不设置SWF尺寸,就是默认尺寸500×375)

scaleMode选noScale时,align选TL以外的值,仍有偏移问题,程序窗口仍把SWF尺寸看成其初始设置的尺寸值400×300。

scaleMode选showAll或noBorder或exactFit时,程序窗口会把SWF尺寸视为初始设置的值(尽管这里Application尺寸已经是800×600,但程序窗口仍把SWF内容尺寸视为初始设置的400×300),并用该尺寸来整体缩放SWF内容,故这里就会造成虽然选了showAll、exactFit,但并不能显示SWF所有内容的问题,因为程序窗口把SWF看成只有400×300大小,而并不是Application的尺寸800×600。而选noBorder时,显示的内容范围就更少。scaleMode选择showAll或noBorder时,align改变值效果跟 第3段 所述类似。scaleMode选择exactFit,则align的值,不会影响SWF内容的位置,因为SWF(按初始值的400×300尺寸内容)铺满窗口,位置固定为[0,0]。

改变窗口尺寸时,如果scaleMode不是noScale,则不会调度Event.RESIZE事件,Stage尺寸也不会改变(仍为初始值800×600),但Application的尺寸一直都会改变填满窗口内容区域尺寸


5、窗口尺寸设置为固定值(如408×334),SWF尺寸设置为比窗口尺寸大的固定值(如500×400)

noScale+TL设置下,窗口无法显示SWF的全部内容,因为SWF尺寸的初始设置值大于窗口值,改变窗口大小时,调度Event.RESIZE事件。Stage尺寸,Application尺寸自动填满窗口内容区域。

noScale+T|TR…其他对齐模式时,程序窗口把SWF尺寸视为其初始设置值(500×400)来确定SWF内容的位置,所以noScale+T,SWF内容会向左偏移,放置于[-50,0],但由于窗口内容区域、Application实际尺寸是400×300,所以窗口右边出现50px的空白背景色区域,noScale+TR时,是100px空白区域


缩放模式选择noScale以外的值。会把SWF尺寸视为初始尺寸设置值来缩放和对齐,但Application尺寸一直都会填满整个窗口可视区域。


总结:

Flex 4 桌面项目的程序窗口总会把SWF内容的尺寸视为SWF中Metadata设置的值(不变),但Application的尺寸会无视对齐和缩放模式选项自动填满窗口内容区域。所以造成Flex 4桌面项目的对齐位置和缩放比例与预期值不符

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读