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

Posted

技术标签:

【中文标题】Adobe AIR - 带有图像的自定义预加载器【英文标题】:Adobe AIR - Custom Preloader with Image 【发布时间】:2011-12-16 14:08:30 【问题描述】:

伙计们,

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

谁能指导我有关 preloader专门针对 AIR 的教程或任何已经内置的教程?

谢谢

【问题讨论】:

您几乎不需要预加载器,因为在 AIR 应用程序中,框架几乎会立即加载。如果您的应用中还有其他需要等待的内容,您可以简单地使用某种进度条。 如何在 AIR 的“打开”窗口中显示预加载器和图像? -1 因为它和***.com/questions/7927028/…是同一个问题 在 Stack Overflow 上提高您的问题的可见性的礼貌方式是 post a bounty。谢谢。 【参考方案1】:

对于 AIR,我可以想出几种方法来实现这一点:

1.使用原生窗口

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

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

创建 2 个状态(例如“正在加载”和“正常”)。将主 WindowedApplication 的“currentState”属性设置为“正在加载”。在这种状态下显示您的启动画面。在显示应用程序之前执行必要的逻辑。引导完成后,将“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>

窗口示例

<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”设置为“true”。您还必须将“可见”属性设置为“假”。这些设置将有效地隐藏主应用程序窗口。然后,我们依次为启动屏幕和主视图创建一个窗口。重要的是主 WindowedApplication 保持不可见,因为另一种方法会使该窗口在启动屏幕出现之前短暂可见(似乎是一个错误)。

【讨论】:

选项 1 和 2 之间的任何事情都可以......是的,我想看看代码......你能告诉我吗?【参考方案2】:

你的意思是闪屏

非官方:

http://inflagrantedelicto.memoryspiral.com/2008/07/creating-a-splash-screen-in-air/ http://www.psyked.co.uk/flex/10-minute-flex-air-tutorial-creating-your-application-splash-screen.htm

官方:

http://livedocs.adobe.com/flex/3/html/help.html?content=FlexApolloComponents_16.html

但是,我认为没有钩子可以让您显示应用程序加载状态的实时进度。

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

【讨论】:

【参考方案3】:

如果这是一款移动应用,而您只想要一个启动画面:

在主应用程序的 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

【讨论】:

不使用mxml怎么办;比如纯actionscript项目? 嗯,已经快 5 年了,但我建议你在它的 Apache 站点上挖掘 Flex sdk 文档并查找相应的操作脚本

以上是关于Adobe AIR - 带有图像的自定义预加载器的主要内容,如果未能解决你的问题,请参考以下文章

Adobe Air 加载内部带有 allowDomain('*') 的外部 swf

Adobe Air - 从 IconItemRenderer 中的文件加载 PNG 图像

带有自定义 jar 库的 adobe air 中的 NativeProcess

Adobe air(HTML + JS)阻止图像,输入和文本区域的右键单击事件

带有 UIImageView 的自定义 UITableViewCell 不为某些单元格加载图像

ActionScript 3 Adobe AIR - 加载本地文本文件