2010年12月27日 星期一
2010年12月24日 星期五
網頁與AIR程式互動
如果需要在Browser上可以與AIR應用程式做互動,如安裝AIR App,或由網頁上的Click觸發啟動AIR App,以下是相關執行程序
一.準備工作
1.AIR程式端設定AIR程式允許透過Browser觸發
設定AIR發布用的application.xml的
加入
2.Browser端Flash取得AIR Browser API
Browser端Flash要操作AIR所要用的API都放在http://airdownload.adobe.com/air/browserapi/air.swf內
透過loader載入這個檔案即可使用相關功能
二.Browser檢查Client是否已經安裝AIR執行環境
"available":可安裝但尚未安裝。
"unavailable":無法安裝
"installed":已安裝
三.Browser檢查Client端是否已經安裝AIR 應用程式
利用檢查AIR應用程式版本來確認程式是否已經安裝,執行後,若檢查完成
會呼叫執行所設定的versionDetectCallback函式,並在這callBack函式內
取得版本值,當版本值為null代表未安裝程式
設定參數:
注意:要讓這功能有效可以使用,在使用air.swf一定要是載入http://airdownload.adobe.com/air/browserapi/air.swf
若將這air.swf複製到local端呼叫使用,則取得版本永遠會是null值
四.Browser安裝AIR App
五.Browser 啟動已安裝AIR APP
六.Browser傳遞參數給AIR App
一.準備工作
1.AIR程式端設定AIR程式允許透過Browser觸發
設定AIR發布用的application.xml的
<application xmlns="http://ns.adobe.com/air/application/2.0">
建議設定發布為AIR 1.53以上版本,因為如果AIR為1.53之前的版本,Browser要呼叫AIR,一定要知道AIR的PID值(在AIR內可以用NativeApplication.nativeApplication.publisherID取得)。若AIR為1.53後的版本,若Browser不知道AIR的PID,可以用""代即可。 加入
<allowBrowserInvocation>true</allowBrowserInvocation>
讓AIR允許被Browser啟動2.Browser端Flash取得AIR Browser API
Browser端Flash要操作AIR所要用的API都放在http://airdownload.adobe.com/air/browserapi/air.swf內
透過loader載入這個檔案即可使用相關功能
public var airSWF:Object;
public var airSWFLoader:Loader = new Loader();
public var loaderContext:LoaderContext = new LoaderContext();
loaderContext.applicationDomain = ApplicationDomain.currentDomain;
airSWFLoader.contentLoaderInfo.addEventListener(Event.INIT, onInit);
airSWFLoader.load(new URLRequest(" http://airdownload.adobe.com/air/browserapi/air.swf"), loaderContext);
private function onInit(e:Event):void {
airSWF = e.target.content;
airSWF.getApplicationVersion(appID, pubID, versionDetectCallback);
}
二.Browser檢查Client是否已經安裝AIR執行環境
var result:String=airSWF.getStatus();
取得回傳值"available":可安裝但尚未安裝。
"unavailable":無法安裝
"installed":已安裝
三.Browser檢查Client端是否已經安裝AIR 應用程式
利用檢查AIR應用程式版本來確認程式是否已經安裝,執行後,若檢查完成
會呼叫執行所設定的versionDetectCallback函式,並在這callBack函式內
取得版本值,當版本值為null代表未安裝程式
airSWF.getApplicationVersion(appID, pubID, versionDetectCallback);
private function versionDetectCallback(version:String):void { }
設定參數:
appID:應用程式ID,即AIR應用程式的application.xml內的id值,或在air內透過
NativeApplication.nativeApplication.applicationID取得
pubID:發佈者ID,在air內透過
NativeApplication.nativeApplication.publisherID取得
注意:要讓這功能有效可以使用,在使用air.swf一定要是載入http://airdownload.adobe.com/air/browserapi/air.swf
若將這air.swf複製到local端呼叫使用,則取得版本永遠會是null值
四.Browser安裝AIR App
airSWF.installApplication(installPath, runtimeVersion, arguments);
設定參數:
installPath:String,要安裝的air檔案路徑
runtimeVersion:String,允許執行的AIR Runtime最低版本,例如"1.5"
arguments:Array,非必填項目,要傳遞給AIR的參數,這參數會被AIR內的
BrowserInvokeEvent.BROWSER_INVOKE事件所接收
五.Browser 啟動已安裝AIR APP
airSWF.launchApplication(appID, pubID, myArguments);
六.Browser傳遞參數給AIR App
airSWF.launchApplication(appID, pubID, myArguments);
只要將傳遞的參數放到myArguments陣列內即可
2010年12月9日 星期四
List物件客製CellRenderer與設定背景顏色
在使用List或DataGrid物件,如果需要自行設計CellRenderer,例如加入圖片,底圖或使用多文字框,以下是自訂CellRender操作流程
一.自訂 CellRenderer Class
自訂CellRenderer必須繼承Sprite或MovieClip且實作ICellRenderer介面
因此一個自訂的CellRenderer Class基本上一定具備以下結構
二.在Flash IDE上產生Instance
在Flash IDE上,依照需要設計產生CellRender所要對應的Symbol
並在Library內設定該Symble的Linkage
三.List利用setStyle指定cellRenderer Class
當已經設計好CellRenderer Class並在fla上產生好Symbol
執行
四.List加入資料
將要提供給cellRenderer用的資料以物件芳式包裝好,再以addItem()加入,這樣CellRenderer內的 set data(obj:Object)即會收到所傳入的物件
例
五.CellRenderer內各Method說明
1.data
當list以addItem將資料加入後,會自動執行set data()
2.listdata
當list.addItem(_itemObj);也同時會觸發renderer內的這個listData method
set listData(ld:ListData)內的ld為一個ListData物件,包含了這個renderer在List內的相關資訊
例如ld.index即是這個render在list內所在位置的index值
3.selected
當render的選取狀態有變化時會觸發這個method,也就是說當使用者在list上click item
如果這個item被選取時,selected(s:Boolean)
s會得到true,若在非選取狀態,則為false
在這裡可利用s值,改變render顯示的樣式,顯示物件選取狀態
4.setSize
只要是在list上做關於size改變的設定,例如
list.setSize()或設定list.rowHeight,都會把在list上設定的大小值
傳給render的setSize(),你可以在這method內依照傳進來的值
調整render內物件的大小
5.setStyle
可用來設定CellRender的顯示樣式,若不想做任何處理,保持空的即可
但一定要保留這method在Class內
6.setMouseState
可用來設定CellRender的滑鼠狀態,若不想做任何處理,保持空的即可
但一定要保留這method在Class內
六.設定List的背景色
List本身並無backgroundColor的選項可供改變List的底色,使用serStyle("backgroundColor")也是無效,若要改變底色需要設定的是"skin"的style,並傳入一個你要當作背景的物件當作傳入值
例
註:skin style預設是List_Skin這Class
一.自訂 CellRenderer Class
自訂CellRenderer必須繼承Sprite或MovieClip且實作ICellRenderer介面
因此一個自訂的CellRenderer Class基本上一定具備以下結構
public class ItemRenderer extends Sprite implements ICellRenderer{
private var _listData:ListData;
private var _data:Object;
private var _selected:Boolean;
public function ItemRenderer() {}
public function set data(d:Object):void {
}
public function get data():Object {
return _data;
}
public function set listData(ld:ListData):void {
trace("ListData=" + ld.label);
_listData = ld;
}
public function get listData():ListData {
return _listData;
}
public function set selected(s:Boolean):void {
_selected = s;
}
public function get selected():Boolean {
return _selected;
}
public function setSize(width:Number, height:Number):void { }
public function setStyle(style:String, value:Object):void { }
public function setMouseState(state:String):void{ }
}
雖然自訂的CellRenderer可以直接繼承自系統的CellRenderer,但最好還是實作ICellRenderer介面,可以有比較大的彈性應用二.在Flash IDE上產生Instance
在Flash IDE上,依照需要設計產生CellRender所要對應的Symbol
並在Library內設定該Symble的Linkage
Class:完整的CellRenderer Class名稱
base Class:flash.display.MovieClip
三.List利用setStyle指定cellRenderer Class
當已經設計好CellRenderer Class並在fla上產生好Symbol
執行
list.setStyle("cellRenderer", ItemRendererClass);
(ItemRendererClass是自訂的Renderer Class)
即可讓list使用你自訂的CellRenderer 四.List加入資料
將要提供給cellRenderer用的資料以物件芳式包裝好,再以addItem()加入,這樣CellRenderer內的 set data(obj:Object)即會收到所傳入的物件
例
var obj=new Object();
obj.id=xxx;
obj.thumb=xxx;...
list.addItem(obj)
五.CellRenderer內各Method說明
1.data
當list以addItem將資料加入後,會自動執行set data()
在list上
list.addItem(_itemObj);
在renderer上會觸發
public function set data(d:Object):void {
//--d即是addItem所帶的_itemObj
//--利用d帶進來的資料,顯示在你要顯示的文字框或圖片--
}
2.listdata
當list.addItem(_itemObj);也同時會觸發renderer內的這個listData method
set listData(ld:ListData)內的ld為一個ListData物件,包含了這個renderer在List內的相關資訊
例如ld.index即是這個render在list內所在位置的index值
3.selected
當render的選取狀態有變化時會觸發這個method,也就是說當使用者在list上click item
如果這個item被選取時,selected(s:Boolean)
s會得到true,若在非選取狀態,則為false
在這裡可利用s值,改變render顯示的樣式,顯示物件選取狀態
4.setSize
只要是在list上做關於size改變的設定,例如
list.setSize()或設定list.rowHeight,都會把在list上設定的大小值
傳給render的setSize(),你可以在這method內依照傳進來的值
調整render內物件的大小
5.setStyle
可用來設定CellRender的顯示樣式,若不想做任何處理,保持空的即可
但一定要保留這method在Class內
6.setMouseState
可用來設定CellRender的滑鼠狀態,若不想做任何處理,保持空的即可
但一定要保留這method在Class內
六.設定List的背景色
List本身並無backgroundColor的選項可供改變List的底色,使用serStyle("backgroundColor")也是無效,若要改變底色需要設定的是"skin"的style,並傳入一個你要當作背景的物件當作傳入值
例
var bg:Sprite = new Sprite();
bg.graphics.beginFill(0xff0000,0.5);
bg.graphics.drawRect(0, 0, 10, 10);
bg.graphics.endFill();
list.setStyle("skin", bg);
註:skin style預設是List_Skin這Class
訂閱:
文章 (Atom)