自定義Flex Library的使用

一般爲了達到資源或是組件的共用,會用到flex library。在flex library可以添加swf、圖片資源或的引用。

使用方法:

在flash builder中右擊選中“新建” –> “Flex Library Project”

輸入工程名後,直接點擊“Finish”,然後建立一個類。

在該類中,綁定指定的資源,如下代碼所示:

package
{
    [Bindable]
    public class LibraryTest
    {
        public function LibraryTest()
        {
        }
        
        [Embed(source="pic/test.png")]
        public var abc:Class;
    }
}

右擊項目,選擇“Properties(屬性)”後,選中左側“Flex Library Compiler”選項,在右側窗口的“Additional compiler arguments”中追加

“-directory=true -output=../bin/”,點擊“OK”,應用設置。

右擊選中項目,點擊“Build Project”即可編譯該Library Project,之後可在bin目錄下得到三個文件。

三個文件:“xxxx.swc、catalog.xml、library.swf”,其中xml是描述文件,swc可直接copy至工程的libs目錄中使用,swf則需要在相應的類中加載後才能使用。

新建一個項目,用來測試上面生成的library.swf。

getClass.mxml的代碼,下面代碼中聲明瞭一個變量bit1,爲什麼要聲明這樣一個“多餘”的變量呢?如果使用swc並不需要這樣做,而加載library.swf,因爲在執行build project的時候,有一些類並未打包到library.swf中,所以在需要調用的程序中,需要加載這相應的類(比較上面的是圖片對應的就是BitmapAsset)。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
                layout="absolute" minWidth="955" minHeight="600" creationComplete="inited()">
    
    <mx:Script>
        <![CDATA[
            import mx.core.BitmapAsset;
            import mx.core.UIComponent;
            
            private function inited():void
            {
                var bit1:BitmapAsset;
                
                var loader:Loader = new Loader();
                
                var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
                var req:URLRequest = new URLRequest("assets/library.swf");
                
                loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
                
                loader.load(req, context);
            }
            
            private function onComplete(evt:Event):void
            {
                trace("library.swf--- loaded --- succ");
                
                var cl:Class = ApplicationDomain.currentDomain.getDefinition("LibraryTest_abc") as Class;
                
                var a:DisplayObject = new cl() as DisplayObject;
                
                var ui:UIComponent = new UIComponent();
                    ui.addChild(a);                    
                
                img.source = cl;
                
                ui.x = 100;
                ui.y = 200;
                
                addChild(ui);
            }
            
        ]]>
    </mx:Script>
    
    <mx:Image id="img" />
    
</mx:Application>

運行程序,可以看到圖片資源均被加載了,使用了對該資源的統一管理(swf的用法與此類似)。

更多參考:

1、使用ApplicationDomain類

2、上面兩個示例的源碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章