Adobe AIR - 带图像的自定义预加载器

时间:2011-10-27 14:43:56

标签: flash actionscript-3 flex air preload

民间,

我设计了一个Adobe AIR应用程序。我想在它打开之前在它上面显示一些preloader

任何人都可以在preloader 专门针对AIR 或任何已经内置的教程中为我指导教程吗?

由于

3 个答案:

答案 0 :(得分:6)

使用AIR,我可以想到几种方法来实现这一目标:

<强> 1。使用原生窗口

将主WindowedApplication的'visible'属性设置为'false'。在'creationComplete'事件中,会生成一个包含启动画面的新窗口。在显示应用程序之前执行必要的逻辑。完成引导程序后,关闭启动画面并将主应用程序的“可见”设置为“true”。

<强> 2。在一个窗口中,使用状态

创建2个状态(例如'loading'和'normal')。将主WindowedApplication的'currentState'属性设置为'loading'。在此状态下显示启动画面。在显示应用程序之前执行必要的逻辑。完成引导程序后,将'currentState'属性设置为'normal'。在“正常”状态下显示您的实际应用程序。

第3。透明的应用

使用透明的AIR应用程序,您可以使用状态(如n°2)和假窗口。然后,您的主应用程序将成为覆盖整个屏幕的透明窗口。您现在可以在此透明窗口内的任何位置放置闪屏和主视图。别担心:您可以点击透明窗口,这样就不会阻止任何内容。

我可以向您展示一些代码,但我需要有关您的应用程序的更多具体信息。

编辑:示例

最简单的解决方案是nr 2:

<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
                       xmlns:s="library://ns.adobe.com/flex/spark"
                       xmlns:v="net.riastar.view"
                       currentState="loading"
                       creationComplete="boot()">

    <fx:Script>
        <![CDATA[
            private function boot():void {
                var bootstrap:Bootstrap = new Bootstrap();
                bootstrap.addEventListener(Event.COMPLETE, showApp);
                bootstrap.boot();
            }

            private function showApp(event:Event):void {
                currentState = 'normal';
            }
        ]]>
    </fx:Script>

    <s:states>
        <s:State name="loading" />
        <s:State name="normal" />
    </s:states> 

    <s:Image source="@Embed('splash.jpg')" includeIn="loading" />
    <v:MainView includeIn="normal" />

</s:WindowedApplication>

Windows的示例

<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
                       xmlns:s="library://ns.adobe.com/flex/spark"
                       xmlns:v="net.riastar.view" 
                       creationComplete="showSplash()" 
                       visible="false">

    <fx:Script>
        <![CDATA[
            import mx.events.AIREvent;
            import spark.components.Window;

            private var splash:Window;

            private function showSplash():void {
                splash = new SplashWindow();
                splash.systemChrome = "none";
                splash.type = NativeWindowType.LIGHTWEIGHT;
                splash.addEventListener(AIREvent.WINDOW_COMPLETE, boot);
                splash.open();
            }

            private function boot(event:AIREvent):void {
                var bootstrap:Bootstrap = new Bootstrap();
                bootstrap.addEventListener(Event.COMPLETE, showApp);
                bootstrap.boot();
            }

            private function showApp(event:Event):void {
                callLater(splash.close);

                var mainWin:Window = new MainApplicationWindow();
                mainWin.open();
            }
        ]]>

    </fx:Script>

</s:WindowedApplication>

这个需要更多解释:在你的应用程序中,你必须将'systemchrome'设置为'none','visible'设置为'false'和'transparent'tot'true'。您还必须将“visible”属性设置为“false”。这些设置将有效地隐藏主应用程序窗口。然后,我们依次为启动画面创建一个窗口,为主视图创建一个窗口。重要的是主WindowedApplication保持不可见,因为另一种方法会在启动屏幕出现之前使该窗口短暂可见(似乎是一个错误)。

答案 1 :(得分:2)

你的意思是启动画面

非官方:

官方:

但是,我不相信有一些钩子可以让您显示应用程序加载状态的实时进度。

您可以尝试通过嵌入一个具有(模拟)进度条的swf来模拟这个,然后显示假进度。

答案 2 :(得分:1)

如果这是一个移动应用,你只需要一个闪屏:

在主应用程序的mxml文件中,插入:

    splashScreenImage="@Embed('MyImage.png')"
    splashScreenScaleMode="zoom"          // optional - display type
    splashScreenMinimumDisplayTime="2000" //optional - display duration

进入ViewNavigatorApplication块。

检查规格:

http://opensource.adobe.com/wiki/display/flexsdk/Mobile+Splash+Screen