自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

深入剖析AS方式重寫Flex組件常規(guī)步驟

開發(fā) 后端
本文向大家介紹一下AS方式重寫Flex組件常規(guī)步驟,為了模塊化設計或進一步重用,需要對Flex組件進行組合,比如一個包括TEXTAREA,BUTTON的復合控件。

在Flex已有Flex組件無法滿足業(yè)務需求,或是需要更改其可視化外觀等特性時,直接進行繼承擴展。這里和大家分享一下AS方式重寫Flex組件常規(guī)步驟。

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

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

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

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

2)指定使用者能夠通過MXML標記進行設置的屬性

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

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

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

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

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

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

(d)UIComponent.layoutChrome()方法,用于定義容器的邊框區(qū)域和確定邊框區(qū)域的位置,以及確定要在邊框區(qū)域中顯示的附加元素。例如,Panel容器使用layoutChrome()方法定義panel容器的title區(qū)域,這個區(qū)域用來包含title文本和close按鈕。
通常,使用RectangularBorder類來定義容器區(qū)域的邊框,而不是用圖片資源去包圍Flex組件。比如創(chuàng)建一個RectangularBorder對象,然后在重載的createChildren()方法中,將其作為一個內容子控件添加到Flex組件中,再用updateDisplayList()方法來確定其位置。

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

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

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

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

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

updateDisplayList()方法形式如下:

  1. protectedfunctionupdateDisplayList(unscaledWidth:Number,unscaledHeight:Number):void 

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

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

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

【編輯推薦】

  1. 解析重寫Flex組件的原因和規(guī)則
  2. 深入學習Flex組件生命周期
  3. 學習總結 在Flex中如何嵌入Flex字體
  4. 揭開Flex正則表達式的神秘面紗
  5. Flex數(shù)據(jù)綁定及其使用頻繁的幾種情況 
責任編輯:佚名 來源: csdn.net
相關推薦

2010-07-28 12:52:39

Flex組件

2010-08-05 11:07:18

重寫Flex組件

2010-08-04 13:52:53

Flex事件機制

2010-08-12 13:25:46

Flex驗證方式

2010-08-09 16:01:37

Flex字體

2010-08-05 10:16:14

Flex效果

2010-07-27 10:39:25

Flex組件

2010-07-28 12:41:18

Flex組件

2010-08-13 09:54:23

Flex字體

2010-08-10 13:58:00

Flex性能測試

2010-08-03 16:21:54

FlexFlash

2010-08-06 15:20:25

Flex Builde

2010-08-04 08:42:28

Flex和Flash

2010-08-12 11:21:30

重寫Flex組件

2010-07-28 12:47:06

Flex組件

2010-08-11 09:01:41

Flex4布局

2010-08-03 13:47:26

Flex程序員

2010-07-30 15:35:11

Flex結合

2010-08-12 16:10:44

Flex應用程序

2010-08-13 09:30:37

Flex樣式
點贊
收藏

51CTO技術棧公眾號