2

サーバーに画像をアップロードするアプリケーションである Flex の小さなプロジェクトに取り組んでいます。これは非常に軽量なアプリケーション (リリース バージョンで約 40 kb) であるため、html ページが読み込まれるとすぐに表示されるようにしたいと考えています。ただし、どういうわけか、表示されるまでに最大 1 ~ 2 秒の遅延があります。実際には、アプリケーションのロードと表示の間の遅延であると思います。これは削除できると思います。

ただし、遅延を短縮/削除する方法についての解決策が見つかりませんでした。まず、プリローダーを無効にしようとしましたが、これは何もしませんでした。実際には、プリローダーがシャットダウンしてからアプリケーションが表示されるまでに遅延があります (約 500 ミリ秒から 1 秒)。私の次の推測は、カスタム プリローダー クラスを作成して、少なくともアプリケーションの画像を表示することでした (クリック可能ではありませんが、少なくとも何か)。

アドバイスをいただければ幸いです。

4

2 に答える 2

0

さて、私は実際に望ましい振る舞いを得ることができました。あなたのコメントは役に立ちました。

方法は次のとおりです。アプリケーションにカスタムプリローダーを実装し、プリローダーのコンストラクターで、アプリケーションのイメージ(読み取り:スクリーンショット)を無効な状態でロードしました(ユーザーがアプリケーションを操作したくないようにするため)。このリンクからSnapShotデモを使用しました-http ://blogs.adobe.com/aharui/2010/01/custom_preloader_downloadprogr.html

これが私がプリローダー用に書いたコードです(ほとんどは以下のリンクからのもので、カットバージョンです):

パッケージ {

import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.DisplayObject;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.net.URLRequest;
import flash.utils.ByteArray;
import mx.events.FlexEvent;
import mx.events.RSLEvent;
import mx.preloaders.IPreloaderDisplay;

public class SSPreloader extends Sprite implements IPreloaderDisplay
{        
    [ Embed(source="startup.png", mimeType="application/octet-stream") ]
    public var WelcomeScreenGraphic:Class;

    private var loader:Loader;
    public function SSPreloader() 
    {
        super();

        loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderBytesLoaded);
        loader.loadBytes(new WelcomeScreenGraphic() as ByteArray);
    }

    public function onLoaderBytesLoaded(event : Event) : void
    {
        loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoaderBytesLoaded);
        if (event.target.content != null)
        {
            var image:DisplayObject = event.target.content as DisplayObject; 
            addChildAt(image,0);
        }
    }


    private var _backgroundAlpha:Number = 1;
    public function get backgroundAlpha():Number
    {
        if (!isNaN(_backgroundAlpha))
            return _backgroundAlpha;
        else
            return 1;
    }

    public function set backgroundAlpha(value:Number):void
    {
        _backgroundAlpha = value;
    }

    //----------------------------------
    //  backgroundColor
    //----------------------------------

    private var _backgroundColor:uint;
    public function get backgroundColor():uint
    {
        return _backgroundColor;
    }
    public function set backgroundColor(value:uint):void
    {
        _backgroundColor = value;
    }

    //----------------------------------
    //  backgroundImage
    //----------------------------------

    private var _backgroundImage:Object;
    public function get backgroundImage():Object
    {
        return _backgroundImage;
    }
    public function set backgroundImage(value:Object):void
    {
        _backgroundImage = value;
    }

    //----------------------------------
    //  backgroundSize
    //----------------------------------

    private var _backgroundSize:String = "";
    public function get backgroundSize():String
    {
        return _backgroundSize;
    }
    public function set backgroundSize(value:String):void
    {
        _backgroundSize = value;
    }

    //----------------------------------
    //  preloader
    //----------------------------------

    private var _preloader:Sprite;         
    public function set preloader(value:Sprite):void
    {
        _preloader = value;

        value.addEventListener(ProgressEvent.PROGRESS, progressHandler);    
        value.addEventListener(Event.COMPLETE, completeHandler);

        value.addEventListener(RSLEvent.RSL_ERROR, rslErrorHandler);

        value.addEventListener(FlexEvent.INIT_PROGRESS, initProgressHandler);
        value.addEventListener(FlexEvent.INIT_COMPLETE, initCompleteHandler);
    }

    //----------------------------------
    //  stageHeight
    //----------------------------------

    private var _stageHeight:Number = 375;
    public function get stageHeight():Number 
    {
        return _stageHeight;
    }
    public function set stageHeight(value:Number):void 
    {
        _stageHeight = value;
    }

    //----------------------------------
    //  stageWidth
    //----------------------------------

    private var _stageWidth:Number = 500;
    public function get stageWidth():Number 
    {
        return _stageWidth;
    }
    public function set stageWidth(value:Number):void 
    {
        _stageWidth = value;
    }

    //--------------------------------------------------------------------------
    //
    //  Methods:IPreloaderDisplay
    //
    //--------------------------------------------------------------------------

    public function initialize():void
    {
    }

    //--------------------------------------------------------------------------
    //
    //  Methods
    //
    //--------------------------------------------------------------------------

    private var lastBarWidth:Number = 0;
    protected function setDownloadProgress(completed:Number, total:Number):void
    {
    }

    protected function setInitProgress(completed:Number, total:Number):void
    {
    }

    protected function showDisplayForDownloading(elapsedTime:int,
                                                 event:ProgressEvent):Boolean
    {
        return false;
    }

    protected function showDisplayForInit(elapsedTime:int, count:int):Boolean
    {
        return false;
    }

    //--------------------------------------------------------------------------
    //
    //  Event handlers
    //
    //--------------------------------------------------------------------------

    protected function progressHandler(event:ProgressEvent):void
    {
    }

    protected function completeHandler(event:Event):void
    {
    }

    protected function rslErrorHandler(event:RSLEvent):void
    {
        _preloader.removeEventListener(ProgressEvent.PROGRESS,
            progressHandler);    

        _preloader.removeEventListener(Event.COMPLETE,
            completeHandler);

        _preloader.removeEventListener(RSLEvent.RSL_ERROR,
            rslErrorHandler);

        _preloader.removeEventListener(FlexEvent.INIT_PROGRESS,
            initProgressHandler);

        _preloader.removeEventListener(FlexEvent.INIT_COMPLETE,
            initCompleteHandler);
    }

    protected function initProgressHandler(event:Event):void
    {
    }

    protected function initCompleteHandler(event:Event):void
    {
        dispatchEvent(new Event(Event.COMPLETE)); 
    }
}    

}

私は最終的に巨大なクラスを取得しましたが、それは本来の目的を果たします。コードに関するコメントをいただければ幸いです。

于 2010-08-30T13:17:38.290 に答える
0

代わりに AS2 を使用すると、よりシンプルで軽量になります

as2で現在のバージョンのswfloaderを使用してみてください

これを flex4 で使用します。たとえば、ここのようにコードにマージされます http://devgirl.files.wordpress.com/2010/04/screen-shot-2010-04-07-at-2-26-32-pm.png

于 2010-08-28T04:38:04.170 に答える