我在尝试将加载动画应用到我的 Flex 应用程序时遇到问题 - 整个浏览器窗口的占用者。我正在继承 Adob e关于此的文章中描述的 DownloadProgressBar 类。stageHeight
和stageWidth
,基类报告的不正确。它在构造函数中显示 500x375 像素,在其他地方显示 0x0。为什么?
5 回答
你解决了这个问题吗?我的 flex 应用程序也有同样的问题。舞台返回 500x375。我的解决方法并不漂亮。此函数在 FlexEvent.INIT_PROGRESS 上调用。所以当我的应用程序可用时,我会使用它的道具。
private function onFlexInitProgress( event:FlexEvent ):void {
if (Application.application != null){
var appWidth:Number = Application.application.width;
var appHeight:Number = Application.application.height;
x = (appWidth * 0.5) - (preloaderSWF.width * 0.5);
y = (appHeight * 0.5);
preloaderSWF.visible = true;
}
}
我不确定这是否会有所帮助,但我认为可以通过使用 Application.width、Application.height 来引用 Flex 应用程序的大小。
http://livedocs.adobe.com/flex/3/html/help.html?content=app_container_2.html
以下问题似乎与您的问题有关:
http://www.nabble.com/Stupid-Question---Flex-width-and-height-td21423345.html
http://www.nabble.com/Flex-stage-size-td20167125.html
http://dreamweaverforum.info/flex/125327-reference-stage-flex.html
希望他们有所帮助。
0x0 的宽度/高度测量值通常表示所讨论的组件在读取时尚未完全布局(包括子组件)。在构造函数中检查测量值肯定为时过早。在您将舞台设置为全屏并且您正在显示的所有内容都已布置好之后,您可能想要检查测量结果,可能在应用程序创建完成事件中,甚至可能更晚。以下链接应该是一个很好的资源:
http://blog.flexexamples.com/2007/08/07/creating-full-screen-flex-applications/
您要做的是将事件侦听器添加到舞台以获取其调整大小事件,并相应地调整预加载器的大小。否则,如果有人在显示预加载器时调整您的 Flex 应用程序的大小,它将不会调整大小。
stage.addEventListener(Event.RESIZE, onStageResize);
public function onStageResize(e : Event) : void {
this.width = stage.stageWidth;
this.height = stage.stageHeight;
}
或者,您可以使用如下代码将您的预加载器集中在舞台上:
preloader.x = this.stage.stageWidth/2 - preloader.width/2;
我在 flash builder 的 actionscript 项目中遇到了同样的问题,使用 100% 到 100% 的宽度和高度。我观察到 stage.stageWidth 和 stage.stageHeight 是 500x375,直到预加载器加载主类之后,它才会变为全屏大小。因此,预加载器中的项目定位不正确。我发现正是我的主课中的这一行正在更新舞台大小:
stage.scaleMode = StageScaleMode.NO_SCALE;
这是我在预加载器中实现它的方式:
public function Preloader()
{
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function onAddedToStage(event:Event):void {
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
stage.scaleMode=StageScaleMode.NO_SCALE;
stage.align=StageAlign.TOP_LEFT;
...
}