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)阻止图像,输入和文本区域的右键单击事件