100%到100%Flex应用程序预加载器定位

时间:2009-04-17 14:13:16

标签: flex preloader

我在尝试将加载动画应用到我的Flex应用程序时遇到了问题 - 整个浏览器窗口占用者。 我正在按照Adobe article中关于此的描述继承DownloadProgressBar类。基类报告的stageHeightstageWidth不正确。它在构造函数中表示500x375像素,在其他地方表示0x0。为什么呢?

6 个答案:

答案 0 :(得分:2)

我有自定义进度加载器的代码,并且从本文开始就非常好 http://askmeflash.com/article_m.php?p=article&id=7

答案 1 :(得分:1)

你解决了这个问题吗?我的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;
    }
}

答案 2 :(得分:0)

我不确定这是否会有所帮助,但我认为可以使用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-referencing-stage-flex.html

希望他们有所帮助。

答案 3 :(得分:0)

0x0的宽度/高度测量值通常表示在阅读时(包括子组件)未完全布局的组件。检查构造函数中的测量结果肯定太早了。在将舞台设置为全屏并且您正在显示的所有内容都已布局后,您可能需要检查测量结果,可能是在应用程序creationComplete事件中,甚至可能更晚。以下链接应该是一个很好的资源:

http://blog.flexexamples.com/2007/08/07/creating-full-screen-flex-applications/

答案 4 :(得分:0)

您要做的是向舞台添加一个事件监听器以用于其resize事件,并相应地调整预加载器的大小。否则,如果有人在显示预加载器时调整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;

答案 5 :(得分:0)

我在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;
        ...
    }
相关问题