Apache flex 补丁flex框架立即显示预加载程序?
在Flex框架中,可以在加载站点时使用自定义预加载程序 在中,它指定“如果在下载700毫秒后下载的应用程序少于一半,则显示进度栏[预加载程序]。” 然而,我总是希望预加载立即出现,因为我知道95%的用户是第一次访问,该网站超过500kb。我不希望人们不得不等待。7秒的预加载动画出现 理论上,我认为有可能通过“猴子补丁”框架来消除这个0.7秒的限制。我没有时间想办法,而且我以前从来没有做过Apache flex 补丁flex框架立即显示预加载程序?,apache-flex,preloader,monkeypatching,Apache Flex,Preloader,Monkeypatching,在Flex框架中,可以在加载站点时使用自定义预加载程序 在中,它指定“如果在下载700毫秒后下载的应用程序少于一半,则显示进度栏[预加载程序]。” 然而,我总是希望预加载立即出现,因为我知道95%的用户是第一次访问,该网站超过500kb。我不希望人们不得不等待。7秒的预加载动画出现 理论上,我认为有可能通过“猴子补丁”框架来消除这个0.7秒的限制。我没有时间想办法,而且我以前从来没有做过 有人帮忙吗?这是在mx.preloaders::DownloadProgressBar.as中的ShowDi
有人帮忙吗?这是在mx.preloaders::DownloadProgressBar.as中的
ShowDisplayforDownload
函数的第1205行
旧式的monkey补丁在AS3中已经过时了,但是您可以编辑Flex源代码并为自己编译一个新的framework.swc(显然很痛苦),或者只将其包含在源代码路径中(source path override.swcs);或者从DownloadProgressBar派生您自己的预加载程序类,该类只覆盖showDisplayForDownloading
并返回true
您可以在“%PROGRAMFILES%\Adobe\Flex Builder 3[插件]\sdks\3.0.0\frameworks\projects\framework\src”中找到框架源,然后找到包路径。如果您使用的是3.1或其他版本,请更改sdk版本。您只需扩展DownloadProgressBar,然后尝试以下代码。我以前用过这个,我发现jesse warden网站上有很多关于这个的信息(我在那里发现的,这是他的代码的精简版) }
在这之后,只需将主应用程序标记中的preload属性更改为preload类。我猜延迟的存在有两个原因:
当我需要绝对确保立即显示预加载程序时,我会制作一个只有预加载程序的小包装swf,然后从那里加载主swf。不可能立即显示预加载程序,因为在显示进度之前需要下载一些类。另一种选择是,您可以在html中显示进度,当加载flash电影时,它会显示在这里。我建议只对DownloadProgressBar类进行子分类。
package{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ProgressEvent;
import mx.events.FlexEvent;
import mx.preloaders.DownloadProgressBar;
public class Preloader extends DownloadProgressBar
{
/**
* The Flash 8 MovieClip embedded as a Class.
*/
[Embed(source="yourPreloaderFile.swf")]
private var FlashPreloaderSymbol:Class;
private var clip:MovieClip;
public function Preloader()
{
super();
clip = new FlashPreloaderSymbol();
addChild(clip);
}
public override function set preloader(preloader:Sprite):void
{
preloader.addEventListener( FlexEvent.INIT_COMPLETE , onFlexInitComplete );
centerPreloader();
}
private function centerPreloader():void
{
x = (stageWidth / 2) - (clip.width / 2);
y = (stageHeight / 2) - (clip.height / 2);
}
private function onFlexInitComplete( event:FlexEvent ):void
{
dispatchEvent( new Event( Event.COMPLETE ) );
}
protected override function showDisplayForDownloading(time : int, event : ProgressEvent) : Boolean {
return true;
}
}