精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

學習筆記 如何重寫Flex組件

開發 后端
本文向大家介紹一下如何重寫Flex組件,在Flex組件無法滿足業務需求,或是需要更改其可視化外觀等特性時,直接進行繼承擴展。

本文和大家重點討論一下重寫Flex組件的概念,為了模塊化設計或進一步重用,需要對Flex組件進行組合。比如一個包括TEXTAREA,BUTTON的復合控件。

重寫Flex組件

一、為什么要重寫組件

1、在Flex已有組件無法滿足業務需求,或是需要更改其可視化外觀等特性時,直接進行繼承擴展。舉例,繼承BUTTON組件的長文本卻不自動換行的自定義控件。
2、為了模塊化設計或進一步重用,需要對Flex組件進行組合。比如一個包括TEXTAREA,BUTTON的復合控件。

二、重寫Flex組件需要經常換位思考的三個角色

1、作為重寫組件的使用者,有哪些需求。比如需要在MXML標簽和AS代碼中暴露哪些屬性及對應默認值、事件和事件的處理邏輯。
2、重寫組件一般需要使用Flex原有組件,要站在原有開發者的角度了解設計規則。
3、作為重寫組件的設計者,在滿足需求的情況下盡量做到可復用、低耦合易擴展等設計原則,讓新組件像Flex原組件一樣好用。

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

1、MXML文件和AS文件***都會被編譯成AS類,只不過MXML編譯速度稍慢一些
2、如果MXML和AS都能完成的一個簡單組件,MXML更容易被創建和控制布局
3、當要覆蓋組件的某些方法時只能用AS方式
4、創建一個直接繼承UIComponent的子類時只能用AS
5、創建非可視化組件比如Formatter、validator、Effect……時,只能用AS
6、要為組件添加日志功能時,只能用AS.

四、AS方式重寫Flex組件常規步驟

1、如果有必要,為組件創建所有基于標記(tag-based)的皮膚(skins)
2、創建ActionScript類文件
⑴從一個基類擴展,比如UIComponent或者其他的組件類
⑵指定使用者能夠通過MXML標記進行設置的屬性
⑶嵌入(Embed)所有的圖片和皮膚文件,文件大小盡可能小

⑷實現構造器,可以設置屬性和樣式的缺省值,或者初始化數據結構,比如數組
⑸根據需要,確定是否覆蓋以下五個方法:
(a)UIComponent.createChildren()方法,創建組件的子組件
(b)UIComponent.commitProperties()方法,提交組件所有的屬性變化,設置measure()方法可能使用的屬性值。絕大多數情況下,都是對影響組件如何在屏幕上顯示的屬性使用這個方法
(c)UIComponent.measure()方法,設置組件的缺省size(measuredWidth、measuredHeight)和缺省的最小size(measuredMinWidth、measuredMinHeight)
(d)UIComponent.layoutChrome()方法,用于定義容器的邊框區域和確定邊框區域的位置,以及確定要在邊框區域中顯示的附加元素。例如,Panel容器使用layoutChrome()方法定義panel容器的title區域,這個區域用來包含title文本和close按鈕。

通常,使用RectangularBorder類來定義容器區域的邊框,而不是用圖片資源去包圍組件。比如創建一個RectangularBorder對象,然后在重載的createChildren()方法中,將其作為一個內容子控件添加到組件中,再用updateDisplayList()方法來確定其位置。
將容器的內容區域和容器邊框區域分開處理的主要原因是為了應對Container.autoLayout
屬性被設置為false的這種情況。當autoLayout(自動布局)屬性使用默認值true時,只要容器子控件的大小和位置發生變化,容器及子控件就會進行度量和布局。而當其為false時,度量和布局只在子控件被添加或移出容器時才執行。分開處理讓Flex在這兩種情況下都執行layoutChrome(),從而在autoLayout屬性為false的情況下,容器仍能夠更新它的邊框區域。

(e)UIComponent.updateDisplayList()方法,根據以前所設置的屬性和樣式來確定組件的子組件在屏幕上的大小(size)及位置(position),并且畫出組件所使用的所有皮膚(skins)及圖形化元素。組件的父容器負責確定組件本身大小(size)。
要在updateDisplayList()方法中確定一個組件的大小,當子組件是UICOMPONENT時使用setActualSize()方法,而不是UICOMPONENT則使用與組件大小相關的屬性width和height。要確定組件的位置,當子組件是UICOMPONENT時使用move()方法,而不是UICOMPONENT則使用x和y屬性。一個區別就是move()方法不僅改變了組件位置,而且在調用這個方法之后立即分發了一個move事件,設置x和y屬性也更改組件的位置,但卻在下一個屏幕更新事件中才會分發move事件。

組件支持很多類型的可視元素,比如皮膚,樣式和邊框。在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
以像素為單位的組件坐標系中,unscaledWidth和unscaledHeight是由父容器確定的組件大小,而不管組件的scaleX,scaleY是多少。縮放發生在FlashPlayer或者AIR中,發生時機是在updateDisplayList()執行之后。比如一個組件的unscaledHeight屬性是100,而其scaleY屬性是2.0,那么它在FlashPlayer或AIR中出現的高度為200像素。

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

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

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

五、深入Flex組件生命周期

1、生命周期(LifeCycle)簡述

⑴調用組件構造函數。構造函數沒有返回類型,沒有參數,使用super()調用父類的構造器
⑵使用set,get設置組件屬性,常在set方法內監控一個布爾變量來實現失效機制
⑶調用addChild()方法將組件添加到父組件顯示列表中,Flex將自動調用createChildren(),invalidateProperties(),invalidateSize(),invalidateDisplayList()。只有將組件添加到父容器中,Flex才能確定它的大小(size),設置它所繼承樣式(style)屬性,或者在屏幕上畫出它
⑷組件的parent屬性設置為對父容器的引用
⑸樣式(style)設置
⑹組件分發preinitialize事件
⑺調用組件createChildren()方法

⑻調用invalidateProperties(),invalidateSize(),invalidateDisplayList()失效方法,Flex將在下一個“渲染事件”(renderevent)期間對相應的commitProperties(),measure(),updateDisplayList()方法進行調用。這個規則唯一例外就是當用戶設置組件的height和width屬性時,Flex不會調用measure()方法。也就是說,只有當組件的explicitWidth和explicitHeight屬性是NaN時Flex才會調用measure()方法。
⑼組件分發initialize事件。此時組件所有的子組件初始化完成,但組件尚未更改size和布局,可以利用這個事件在組件布局之前執行一些附加的處理
⑽在父容器上分發childAdd事件

⑾在父容器上分發initialize事件
⑿在下一個“渲染事件”(renderevent)中,Flex執行以下動作:
a.調用組件的commitProperties()方法
b.調用組件的measure()方法
c.調用組件的layoutChrome()方法
d.調用組件的updateDisplayList()方法
e.在組件上分發updateComplete事件

⒀如果commitProperties(),measure(),updateDisplayList()方法調用了invalidateProperties(),invalidateSize(),invalidateDisplayList()方法,則Flexh會分發另外一個render事件
⒁在***的render事件發生后,Flex執行以下動作:
a.設置組件visible屬性使其可視
b.組件分發creationComplete事件,組件的大小(size)和布局被確定,這個事件只在組件創建時分發一次
c.組件分發updateComplete事件。無論什么時候,只要組件的布局(layout),位置,大小或其它可視的屬性發生變化就會分發這事件,然后更新組件來正確地顯示。

2、為什么使用失效機制(invalidationmechanism)

一種情況是,當設置了組件的多個屬性后,比如Button控件的label和icon屬性,我們需要所有屬性被設置后一次性執行commitProperties(),measure(),updateDisplayList()方法,而不是設置過label屬性后執行一遍這些方法,然后在設置icon屬性后又執行一次這些方法。
另一種情況是幾個組件同時更改了它們的字體大小。程序更改字體大小的執行速度大大快于Flex更新應用的速度,因此要在確定最終更改字體之后才開始更新布局。另外,Flex需要協調布局操作以消除任何冗余過程,而不是在每個組件更新它的字體大小之后都執行一次布局操作。
Flex使用“失效機制(invalidationmechanism)”來同步組件的更改。Flex用一系列方法的調用,比如在setter方法內監控一個變更變量來標記組件的某些東西已經發生變化,然后在下一個“渲染事件(renderevent)”中觸發組件的commitProperties(),measure(),layoutChrome(),updateDisplayList()檢查這些布爾變量來完成最終的變更邏輯。這樣做的額外好處就是setter方法可以更迅速地返回,把對新屬性值的處理留給了commitProperties()方法。

失效方法及其對應的觸發函數如下:
invalidateProperties()通知組件,以使下次屏幕更新時,它的commitProperties()方法被調用。
invalidateSize()通知組件,以使下次屏幕更新時,它的measure()方法被調用。
invalidateDisplayList()通知組件,以使下次屏幕更新時它的layoutChrome()方法和
updateDisplayList()方法能被調用。
當組件調用一個“失效”方法時,它就通知Flex該組件已經被更新。當多個組件調用失效
方法,Flex會在schedules中協調這些更新,以使這些更新操作在下一次屏幕更新時一起執行。注意,createChildren()沒有對應的失效方法,它會在調用后被立即執行。

【編輯推薦】

  1. Flex4beta的Spark布局特性解析
  2. Flex3到Flex4的轉變新特性值得關注
  3. Flex4Beta引入新元素功能更強大
  4. FlexBuilder3.0與Eclipse3.4的***結合
  5. 技術分享 Flex4兼容模式如何移植到發布版本

 

責任編輯:佚名 來源: csdn.net
相關推薦

2010-07-28 12:41:18

Flex組件

2010-07-30 13:52:17

Flex組件

2010-07-28 12:52:39

Flex組件

2022-02-16 15:32:58

FlexUI框架容器組件

2022-02-17 20:07:45

Flex鴻蒙Flex組件

2010-08-05 10:29:11

Flex效果

2010-08-04 09:26:27

Flex數據

2010-08-10 16:41:54

FlexJSP

2010-08-12 11:21:30

重寫Flex組件

2010-08-12 11:29:01

Flex組件

2010-08-12 11:05:33

Flex數據綁定

2010-08-11 15:35:47

Flex DataGr

2010-08-05 11:07:18

重寫Flex組件

2010-08-10 15:26:38

Flex應用程序

2010-07-30 13:08:38

Flex調用JavaS

2010-08-12 13:34:13

Flex驗證組件

2010-08-09 10:34:05

Flex背景

2010-07-30 09:28:09

Flex數據綁定

2010-08-06 13:22:48

FlexCSS

2010-08-05 15:46:13

Flex行為Flex效果
點贊
收藏

51CTO技術棧公眾號

丝袜视频国产在线播放| 亚洲毛片亚洲毛片亚洲毛片| 国产白丝在线观看| 99久久国产免费看| 国产精品久久久久av免费| 成年人免费视频播放| 日韩免费一级| 欧美性极品xxxx娇小| 亚洲精品人成| 成人免费公开视频| 肉色丝袜一区二区| 久久99热精品这里久久精品| 91av在线免费| 亚洲福利影视| 欧美性猛交xxxx乱大交3| 亚洲精品第一区二区三区| www精品国产| 久久蜜桃精品| 欧美精品一本久久男人的天堂| 国产肉体xxxx裸体784大胆| 青青伊人久久| 欧美性猛交xxxx偷拍洗澡| 中文字幕剧情在线观看一区| 视频福利在线| 成人少妇影院yyyy| 国产欧美一区二区三区在线看| 精品少妇theporn| 日韩激情在线| 亚洲成人精品av| 伊人成人222| 国产精品专区免费| 亚洲一区二区三区四区五区中文| 亚洲午夜精品国产| 国内精品在线视频| 不卡大黄网站免费看| 成人信息集中地欧美| 看黄色一级大片| 9国产精品视频| 欧美黑人极品猛少妇色xxxxx| 成人黄色a级片| 亚洲精品播放| 亚洲国产成人在线播放| 中文字幕第六页| 91tv亚洲精品香蕉国产一区| 黑人极品videos精品欧美裸| 成年女人18级毛片毛片免费| 麻豆传媒在线观看| 国产精品久久久久久久久图文区| 欧美在线播放一区| 九色在线免费| 国产亚洲精品aa| 免费一区二区三区在在线视频| 狠狠人妻久久久久久综合麻豆| 国产乱色国产精品免费视频| 成人免费观看a| 亚洲香蕉在线视频| 日本在线不卡视频一二三区| 日av在线播放中文不卡| 男人的天堂一区二区| 亚洲人www| 色与欲影视天天看综合网| 午夜剧场免费在线观看| 一本精品一区二区三区| 久久久999精品免费| 色婷婷在线视频观看| 91精品国产91久久久久久密臀 | 国产精品久久久亚洲| 男人天堂视频网| 美国十次了思思久久精品导航| 国产精品极品美女粉嫩高清在线| 超碰在线观看91| 免费xxxx性欧美18vr| 国产欧美日韩91| 国产美女三级无套内谢| 国产精品一级在线| 国产日韩欧美综合精品| 日本护士...精品国| 国产色91在线| 黄色www在线观看| 免费污视频在线| 精品国产91久久久久久老师| 国产第一页视频| 欧美午夜三级| 日韩欧美一级片| 老司机午夜免费福利| 亚洲国产网址| www.日韩av.com| 国产一级二级毛片| 久久久久欧美精品| 成人国产精品一区二区| 亚洲精品视频专区| 久久精品夜夜夜夜久久| 黄色免费高清视频| 久久久男人天堂| 精品婷婷伊人一区三区三| 国产精品999.| 亚洲电影男人天堂| 久久精品免费播放| 成人精品在线看| 久久精品国产第一区二区三区| 超碰97网站| 黄色片在线播放| 亚洲精品午夜久久久| 日韩欧美精品在线观看视频| 精品国产一级| 亚洲性线免费观看视频成熟| 久久久久无码国产精品| 青娱乐精品视频| 国产日韩在线一区二区三区| 日本中文字幕电影在线免费观看| 亚洲国产日韩在线一区模特| 中日韩av在线播放| 影视先锋久久| 欧美国产第二页| 亚洲 小说区 图片区| 成人亚洲一区二区一| 一区二区欧美日韩| www.精品| 亚洲国产精久久久久久| 在线观看亚洲网站| 日本aⅴ亚洲精品中文乱码| 国产伦视频一区二区三区| 欧美性猛交xxx乱大交3蜜桃| 色婷婷久久99综合精品jk白丝| 日批视频免费看| 99热国内精品| 国产精品成人av在线| 天堂在线视频观看| 亚洲夂夂婷婷色拍ww47| 国产永久免费网站| 欧美日韩水蜜桃| 2019亚洲男人天堂| 粉嫩av一区二区夜夜嗨| 亚洲女与黑人做爰| 中文字幕在线综合| 精品久久影视| 欧美在线中文字幕| 少妇又色又爽又黄的视频| 亚洲精品欧美专区| 天天综合天天添夜夜添狠狠添| 日韩免费在线| 国产精品网红福利| www 日韩| 欧美色老头old∨ideo| 黄免费在线观看| 亚洲女人av| 欧美成人综合一区| 中文字幕在线直播| 亚洲美女精品久久| 国产伦精品一区二区三区视频网站| 99在线热播精品免费| 欧美午夜小视频| 风间由美一区二区av101| 精品中文字幕在线| www.色播.com| 亚洲国产一区二区a毛片| wwwxxx色| 亚洲国产国产亚洲一二三| 国产精品视频在线免费观看| 成人福利电影| 日韩精品日韩在线观看| 成人毛片在线播放| 国产偷国产偷精品高清尤物| 嫩草av久久伊人妇女超级a| 国产成人精品一区二区免费看京 | 日韩三级视频在线| 91蜜桃在线观看| 国产在线观看福利| 精品一区电影| 91久久国产婷婷一区二区| 在线观看a级片| 亚洲国产精品久久久久| 亚洲另类在线观看| 国产精品污www在线观看| 免费一区二区三区在线观看| 一区二区中文字| 国产欧美日韩伦理| 欧美xo影院| 最近2019中文字幕大全第二页 | 日韩亚洲欧美一区| 日韩av在线电影| 国产亚洲欧洲997久久综合 | av在线不卡免费看| 国产一区视频免费观看| 日韩一级毛片| 国产高清精品一区二区三区| 成人午夜视屏| 久久精品国产清自在天天线 | 欧美一级做一级爱a做片性| 久久国产精品久久久久| 天天干天天摸天天操| 欧美又粗又大又爽| 麻豆视频在线观看| 国产网红主播福利一区二区| 成人三级做爰av| 久久久久久久波多野高潮日日| 天天操天天干天天玩| 香蕉久久夜色精品国产使用方法 | 欧美猛少妇色xxxxx| 视频三区在线观看| 欧美一区日韩一区| 黑人精品无码一区二区三区AV| 亚洲天堂久久久久久久| 女尊高h男高潮呻吟| 国产一区二区三区黄视频| 欧美a v在线播放| 国产精品福利在线观看播放| 久久综合婷婷综合| 999久久久精品一区二区| 国产精品视频久久| 人在线成免费视频| 久久成人综合视频| 裸体xxxx视频在线| 精品久久久久香蕉网| 在线播放精品视频| 欧美性猛交xxxx久久久| 免费网站观看www在线观| 国产午夜精品理论片a级大结局| av不卡中文字幕| 九九在线精品视频| 久久久久国产精品熟女影院| 日韩午夜av在线| 日韩黄色片在线| 91九色精品| 亚洲国产精品一区二区第一页| 日韩福利视频一区| 国产精品视频在线免费观看| 国产美女亚洲精品7777| 国产伦精品免费视频| 樱花草涩涩www在线播放| 欧美国产精品va在线观看| 日本综合在线| 色老头一区二区三区| 国产98在线| 亚洲天堂av在线播放| 日产精品久久久久久久性色| 亚洲国产日韩欧美综合久久| 成人小说亚洲一区二区三区| 欧美一级片在线| 国产精品高潮呻吟av| 欧美区在线观看| 瑟瑟视频在线免费观看| 色94色欧美sute亚洲线路一ni| 草久视频在线观看| 欧美日韩亚洲网| 日韩色图在线观看| 都市激情亚洲色图| 最新中文字幕一区| 日韩欧美高清视频| 久久久久久在线观看| 色婷婷av一区二区三区大白胸 | 国产一区二区三区高清视频| 日韩一级淫片| 亚洲综合在线做性| 婷婷综合国产| 国产精品swag| 欧美日韩看看2015永久免费 | 亚洲精品五月天| 久草视频在线资源站| 夜夜嗨av一区二区三区四季av| 欧美精品一区二区成人| 一区二区三区中文免费| 久久久久久久久精| 午夜亚洲福利老司机| 丁香六月婷婷综合| 在线观看成人小视频| 亚洲视频久久久| 91精品久久久久久久久99蜜臂| aa视频在线免费观看| 精品剧情在线观看| 你懂的视频在线观看| 中文字幕视频在线免费欧美日韩综合在线看 | 亚洲欧美在线成人| 国产日韩欧美电影在线观看| 国产精品一区二区三区av| 成人资源av| 国产成人久久| 中文字幕久久一区| 136国产福利精品导航网址| 久久久久久久久久久久久国产精品 | 日韩在线观看中文字幕| 国产精品一区二区三区精品| 九色成人国产蝌蚪91| 中文字幕在线亚洲三区| 激情欧美日韩一区| 久久久久久久久久福利| 精品亚洲aⅴ乱码一区二区三区| 妖精视频在线观看| 久久嫩草精品久久久久| 登山的目的在线| 五月开心婷婷久久| 怡红院男人的天堂| 亚洲成人av在线| 1769视频在线播放免费观看| 欧美激情视频一区| 韩国三级一区| 97中文在线观看| 欧美一级精品| 亚洲精品蜜桃久久久久久| 蜜臀av性久久久久蜜臀av麻豆| 深夜视频在线观看| 国产精品嫩草影院av蜜臀| 久久精品这里有| 欧美日韩一卡二卡三卡| 天天干天天做天天操| 久久久精品亚洲| 成人短视频app| 北条麻妃高清一区| 97精品国产福利一区二区三区| 成熟丰满熟妇高潮xxxxx视频| 久久9热精品视频| 无码人妻精品一区二区中文| 尤物在线观看一区| 免费黄色一级大片| 日韩精品视频中文在线观看| av毛片在线| 国产精品色婷婷视频| 欧美一级一片| 又大又硬又爽免费视频| 国产一区二区0| 毛片视频免费播放| 欧洲一区在线观看| 欧洲一级在线观看| 久久人人爽人人| 欧美黄色一级| 日本女人高潮视频| 人人精品人人爱| 90岁老太婆乱淫| 欧美日韩久久久久| 日本xxxxwww| 欧美第一黄色网| www.91精品| 一区二区三区四区五区精品| 日本伊人精品一区二区三区观看方式 | 日本特级黄色大片| 美女视频一区在线观看| 国产熟女一区二区| 日本精品一级二级| 精品电影在线| 国产91精品在线播放| 先锋影音国产精品| 国产一区二区网| 暴力调教一区二区三区| 日本熟妇成熟毛茸茸| 亚洲国产精品久久久| 1区2区在线| 久久国产精品亚洲va麻豆| 亚洲韩日在线| 成人免费毛片日本片视频| 五月婷婷久久综合| 色噜噜在线播放| 国产91ⅴ在线精品免费观看| 天海翼亚洲一区二区三区| 黑人糟蹋人妻hd中文字幕| 久久久蜜臀国产一区二区| 无码人妻精品一区二区三区9厂| 亚洲一级片在线看| 人人精品久久| 欧美另类videos| 国产aⅴ综合色| 日本一级一片免费视频| 亚洲精品在线看| 亚洲一区二区三区四区| 亚洲精品不卡| 国产精品一品视频| 日韩av在线播放观看| 亚洲色图17p| 国语自产精品视频在线看抢先版结局| 一区二区三区免费看| 国产一区福利在线| 亚洲国产精一区二区三区性色| 亚洲激情视频在线| 男人皇宫亚洲男人2020| 亚洲狠狠婷婷综合久久久| 国产伦精品一区二区三区在线观看| 免费一级黄色大片| 日韩精品小视频| 色综合视频一区二区三区日韩| 欧美大片免费播放| 99久久伊人久久99| 久久这里只有精品9| 久久香蕉频线观| 秋霞影院一区二区三区| 亚洲天堂av线| 一级精品视频在线观看宜春院| 天堂av在线资源| 国产在线精品成人一区二区三区| 欧美日韩国产免费观看 | 99久久精品国产色欲| 97精品国产97久久久久久| 精品国产1区| 色哟哟在线观看视频| 91久久人澡人人添人人爽欧美| a级影片在线| 日本10禁啪啪无遮挡免费一区二区| 精品一区二区三区免费播放 | 韩国欧美一区| 欧美激情亚洲色图| 精品国产一区二区三区不卡| 日本少妇一区|