AS方式重寫Flex元件常規步驟

2021-08-30 19:02:34 字數 2691 閱讀 5156

flex元件有很多值得學習的地方,本文向大家簡單介紹一下as方式重寫flex元件常規步驟,希望本文的介紹能讓你有所收穫。

as方式重寫flex元件常規步驟

1、如果有必要,為flex元件建立所有基於標記(tag-based)的**(skins)

2、建立actionscript類檔案

⑴從乙個基類擴充套件,比如uicomponent或者其他的flex元件類

⑵指定使用者能夠通過mxml標記進行設定的屬性

⑶嵌入(embed)所有的和**檔案,檔案大小盡可能小

⑷實現構造器,可以設定屬性和樣式的預設值,或者初始化資料結構,比如陣列

⑸根據需要,確定是否覆蓋以下五個方法:

(a)uicomponent.createchildren()方法,建立flex元件的子flex元件

(b)uicomponent.commitproperties()方法,提交flex元件所有的屬性變化,設定measure()方法可能使用的屬性值。絕大多數情況下,都是對影響flex元件如何在螢幕上顯示的屬性使用這個方法

(c)uicomponent.measure()方法,設定flex元件的預設size(measuredwidth、measuredheight)和預設的最小size(measuredminwidth、measuredminheight)

(d)uicomponent.layoutchrome()方法,用於定義容器的邊框區域和確定邊框區域的位置,以及確定要在邊框區域中顯示的附加元素。例如,panel容器使用layoutchrome()方法定義panel容器的title區域,這個區域用來包含title文字和close按鈕。

通常,使用rectangularborder類來定義容器區域的邊框,而不是用資源去包圍flex元件。比如建立乙個rectangularborder物件,然後在過載的createchildren()方法中,將其作為乙個內容子控制項新增到flex元件中,再用updatedisplaylist()方法來確定其位置。

將容器的內容區域和容器邊框區域分開處理的主要原因是為了應對container.autolayout

屬性被設定為false的這種情況。當autolayout(自動布局)屬性使用預設值true時,只要容器子控制項的大小和位置發生變化,容器及子控制項就會進行度量和布局。而當其為false時,度量和布局只在子控制項被新增或移出容器時才執行。分開處理讓flex在這兩種情況下都執行layoutchrome(),從而在autolayout屬性為false的情況下,容器仍能夠更新它的邊框區域。

(e)uicomponent.updatedisplaylist()方法,根據以前所設定的屬性和樣式來確定flex元件的子flex元件在螢幕上的大小(size)及位置(position),並且畫出flex元件所使用的所有**(skins)及圖形化元素。flex元件的父容器負責確定flex元件本身大小(size)。

要在updatedisplaylist()方法中確定乙個flex元件的大小,當子flex元件是uicomponent時使用setactualsize()方法,而不是uicomponent則使用與flex元件大小相關的屬性width和height。要確定flex元件的位置,當子flex元件是uicomponent時使用move()方法,而不是uicomponent則使用x和y屬性。乙個區別就是move()方法不僅改變了flex元件位置,而且在呼叫這個方法之後立即分發了乙個move事件,設定x和y屬性也更改flex元件的位置,但卻在下乙個螢幕更新事件中才會分發move事件。

◆flex元件支援很多態別的可視元素,比如**,樣式和邊框。在updatedisplaylist()方法中,可以新增這些可視元素,並對它們進行一些控制。由於uicomponent繼承自sprite,所以可以使用graphics物件中的flash繪畫apis進行繪製圖形,比如使用graphics類去畫邊框水平線以及其他圖形元素:

graphics.linestyle(1,0x000000,1.0);

graphics.drawrect(0,0,unscaledwidth,unscaledheight);

updatedisplaylist()

方法形式如下:

protectedfunctionupdatedisplaylist(unscaledwidth:number,unscaledheight:number):void

以畫素為單位的flex元件座標系中,unscaledwidth和unscaledheight是由父容器確定的flex元件大小,而不管flex元件的scalex,scaley是多少。縮放發生在flashplayer或者air中,發生時機是在updatedisplaylist()執行之後。比如乙個flex元件的unscaledheight屬性是100,而其scaley屬性是2.0,那麼它在flashplayer或air中出現的高度為200畫素。

需要注意的是,定義新flex元件時不一定要過載所有的五個方法,只需過載實現flex元件功能所必需的即可。比如實現乙個自定義的button控制項,該控制項使用新的機制來定義預設大小(size)。在這種情況下,只需要過載measure()方法。或者,要實現vbox容器的乙個新子類。新子類利用vbox類已有的所有有關設定大小(sizing)的邏輯,但是變更了vbox類的布局邏輯以實現從底部到頂部的方式來布局容器中的子控制項,而不是自頂向下的布局。在這種情況下,只需要過載updatedisplaylist()方法。

(6)增加屬性(properties),方法(methods),樣式(styles),事件(events)以及元資料

flex元件重寫

1.在類宣告前插入 style 元資料標籤,語法如下 style name style name property value 2.定義乙個靜態初始器,為樣式屬性設定預設值。3.覆寫stylechanged 方法,檢測樣式屬性是否改變。4.覆寫updatedisplaylist 方法,在顯示元件時加...

flex 組建重寫

flex歷經幾個版本的變化,其封裝性也越來越規範。今日flex的學習,總結是元件的重寫。專案中為使元件的針對性,易用性更強 免不了要重寫元件。要改變你的對手你的了解你的對手。乙個元件從被new到渲染出來主要經歷幾個重要事件,其順序為 1.constructor 2.creatchildren 3.c...

Flex元件開發

sunday,may 11th,2008 原文在這裡 tutorial the flash and flex marriage 這也是乙個在flashide中建立flex元件的好教程,值得好好研究!tags component posted in flex元件開發 friday,may 9th,20...