為什么要重寫Flex組件

這篇文章主要為大家展示了“為什么要重寫Flex組件”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“為什么要重寫Flex組件”這篇文章吧。

創(chuàng)新互聯(lián)建站是一家以網(wǎng)絡(luò)技術(shù)公司,為中小企業(yè)提供網(wǎng)站維護(hù)、網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站備案、服務(wù)器租用、域名注冊(cè)、軟件開(kāi)發(fā)、重慶小程序開(kāi)發(fā)等企業(yè)互聯(lián)網(wǎng)相關(guān)業(yè)務(wù),是一家有著豐富的互聯(lián)網(wǎng)運(yùn)營(yíng)推廣經(jīng)驗(yàn)的科技公司,有著多年的網(wǎng)站建站經(jīng)驗(yàn),致力于幫助中小企業(yè)在互聯(lián)網(wǎng)讓打出自已的品牌和口碑,讓企業(yè)在互聯(lián)網(wǎng)上打開(kāi)一個(gè)面向全國(guó)乃至全球的業(yè)務(wù)窗口:建站咨詢電話:028-86922220

重寫Flex組件

一、為什么要重寫Flex組件

1、在Flex已有Flex組件無(wú)法滿足業(yè)務(wù)需求,或是需要更改其可視化外觀等特性時(shí),直接進(jìn)行繼承擴(kuò)展。舉例,繼承BUTTONFlex組件的長(zhǎng)文本卻不自動(dòng)換行的自定義控件。

2、為了模塊化設(shè)計(jì)或進(jìn)一步重用,需要對(duì)Flex組件進(jìn)行組合。比如一個(gè)包括TEXTAREA,BUTTON的復(fù)合控件。

二、重寫Flex組件需要經(jīng)常換位思考的三個(gè)角色

1、作為重寫Flex組件的使用者,有哪些需求。比如需要在MXML標(biāo)簽和AS代碼中暴露哪些屬性及對(duì)應(yīng)默認(rèn)值、事件和事件的處理邏輯。

2、重寫Flex組件一般需要使用Flex原有Flex組件,要站在原有開(kāi)發(fā)者的角度了解設(shè)計(jì)規(guī)則。

3、作為重寫Flex組件的設(shè)計(jì)者,在滿足需求的情況下盡量做到可復(fù)用、低耦合易擴(kuò)展等設(shè)計(jì)原則,讓新Flex組件像Flex原Flex組件一樣好用。

三、重寫Flex組件AS方式和MXML方式的采用規(guī)則

1、MXML文件和AS文件***都會(huì)被編譯成AS類,只不過(guò)MXML編譯速度稍慢一些

2、如果MXML和AS都能完成的一個(gè)簡(jiǎn)單Flex組件,MXML更容易被創(chuàng)建和控制布局

3、當(dāng)要覆蓋Flex組件的某些方法時(shí)只能用AS方式

4、創(chuàng)建一個(gè)直接繼承UIComponent的子類時(shí)只能用AS

5、創(chuàng)建非可視化Flex組件比如Formatter、validator、Effect……時(shí),只能用AS

6、要為Flex組件添加日志功能時(shí),只能用AS.

四、AS方式重寫Flex組件常規(guī)步驟

1、如果有必要,為Flex組件創(chuàng)建所有基于標(biāo)記(tag-based)的皮膚(skins)

2、創(chuàng)建ActionScript類文件

1)從一個(gè)基類擴(kuò)展,比如UIComponent或者其他的Flex組件類

2)指定使用者能夠通過(guò)MXML標(biāo)記進(jìn)行設(shè)置的屬性

3)嵌入(Embed)所有的圖片和皮膚文件,文件大小盡可能小

4)實(shí)現(xiàn)構(gòu)造器,可以設(shè)置屬性和樣式的缺省值,或者初始化數(shù)據(jù)結(jié)構(gòu),比如數(shù)組

5)根據(jù)需要,確定是否覆蓋以下五個(gè)方法:

(a)UIComponent.createChildren()方法,創(chuàng)建Flex組件的子Flex組件

(b)UIComponent.commitProperties()方法,提交Flex組件所有的屬性變化,設(shè)置measure()方法可能使用的屬性值。絕大多數(shù)情況下,都是對(duì)影響Flex組件如何在屏幕上顯示的屬性使用這個(gè)方法

(c)UIComponent.measure()方法,設(shè)置Flex組件的缺省size(measuredWidth、measuredHeight)和缺省的最小size(measuredMinWidth、measuredMinHeight)

(d)UIComponent.layoutChrome()方法,用于定義容器的邊框區(qū)域和確定邊框區(qū)域的位置,以及確定要在邊框區(qū)域中顯示的附加元素。例如,Panel容器使用layoutChrome()方法定義panel容器的title區(qū)域,這個(gè)區(qū)域用來(lái)包含title文本和close按鈕。

通常,使用RectangularBorder類來(lái)定義容器區(qū)域的邊框,而不是用圖片資源去包圍Flex組件。比如創(chuàng)建一個(gè)RectangularBorder對(duì)象,然后在重載的createChildren()方法中,將其作為一個(gè)內(nèi)容子控件添加到Flex組件中,再用updateDisplayList()方法來(lái)確定其位置。

將容器的內(nèi)容區(qū)域和容器邊框區(qū)域分開(kāi)處理的主要原因是為了應(yīng)對(duì)Container.autoLayout

屬性被設(shè)置為false的這種情況。當(dāng)autoLayout(自動(dòng)布局)屬性使用默認(rèn)值true時(shí),只要容器子控件的大小和位置發(fā)生變化,容器及子控件就會(huì)進(jìn)行度量和布局。而當(dāng)其為false時(shí),度量和布局只在子控件被添加或移出容器時(shí)才執(zhí)行。分開(kāi)處理讓Flex在這兩種情況下都執(zhí)行l(wèi)ayoutChrome(),從而在autoLayout屬性為false的情況下,容器仍能夠更新它的邊框區(qū)域。

(e)UIComponent.updateDisplayList()方法,根據(jù)以前所設(shè)置的屬性和樣式來(lái)確定Flex組件的子Flex組件在屏幕上的大?。╯ize)及位置(position),并且畫出Flex組件所使用的所有皮膚(skins)及圖形化元素。Flex組件的父容器負(fù)責(zé)確定Flex組件本身大小(size)。

要在updateDisplayList()方法中確定一個(gè)Flex組件的大小,當(dāng)子Flex組件是UICOMPONENT時(shí)使用setActualSize()方法,而不是UICOMPONENT則使用與Flex組件大小相關(guān)的屬性width和height。要確定Flex組件的位置,當(dāng)子Flex組件是UICOMPONENT時(shí)使用move()方法,而不是UICOMPONENT則使用x和y屬性。一個(gè)區(qū)別就是move()方法不僅改變了Flex組件位置,而且在調(diào)用這個(gè)方法之后立即分發(fā)了一個(gè)move事件,設(shè)置x和y屬性也更改Flex組件的位置,但卻在下一個(gè)屏幕更新事件中才會(huì)分發(fā)move事件。

Flex組件支持很多類型的可視元素,比如皮膚,樣式和邊框。在updateDisplayList()方法中,可以添加這些可視元素,并對(duì)它們進(jìn)行一些控制。由于UICOMPONENT繼承自SPRITE,所以可以使用Graphics對(duì)象中的Flash繪畫APIs進(jìn)行繪制圖形,比如使用Graphics類去畫邊框水平線以及其他圖形元素:

graphics.lineStyle(1,0x000000,1.0);   graphics.drawRect(0,0,unscaledWidth,unscaledHeight);

updateDisplayList()方法形式如下:

protectedfunctionupdateDisplayList(unscaledWidth:Number,unscaledHeight:Number):void()   {   }

以像素為單位的Flex組件坐標(biāo)系中,unscaledWidth和unscaledHeight是由父容器確定的Flex組件大小,而不管Flex組件的scaleX,scaleY是多少。縮放發(fā)生在FlashPlayer或者AIR中,發(fā)生時(shí)機(jī)是在updateDisplayList()執(zhí)行之后。比如一個(gè)Flex組件的unscaledHeight屬性是100,而其scaleY屬性是2.0,那么它在FlashPlayer或AIR中出現(xiàn)的高度為200像素。

需要注意的是,定義新Flex組件時(shí)不一定要重載所有的五個(gè)方法,只需重載實(shí)現(xiàn)Flex組件功能所必需的即可。比如實(shí)現(xiàn)一個(gè)自定義的Button控件,該控件使用新的機(jī)制來(lái)定義缺省大小(size)。在這種情況下,只需要重載measure()方法?;蛘?,要實(shí)現(xiàn)VBox容器的一個(gè)新子類。新子類利用VBox類已有的所有有關(guān)設(shè)定大?。╯izing)的邏輯,但是變更了VBox類的布局邏輯以實(shí)現(xiàn)從底部到頂部的方式來(lái)布局容器中的子控件,而不是自頂向下的布局。在這種情況下,只需要重載updateDisplayList()方法。

(6)增加屬性(properties),方法(methods),樣式(styles),事件(events)以及元數(shù)據(jù)

3、以ActionScript文件或者SWC文件的形式部署Flex組件

以上是“為什么要重寫Flex組件”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

當(dāng)前標(biāo)題:為什么要重寫Flex組件
瀏覽路徑:http://bm7419.com/article44/gospee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、網(wǎng)站排名、ChatGPT企業(yè)建站、網(wǎng)站策劃手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司