Flex组件生命周期.doc

上传人:scccc 文档编号:13817878 上传时间:2022-01-24 格式:DOC 页数:14 大小:154KB
返回 下载 相关 举报
Flex组件生命周期.doc_第1页
第1页 / 共14页
Flex组件生命周期.doc_第2页
第2页 / 共14页
Flex组件生命周期.doc_第3页
第3页 / 共14页
Flex组件生命周期.doc_第4页
第4页 / 共14页
Flex组件生命周期.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《Flex组件生命周期.doc》由会员分享,可在线阅读,更多相关《Flex组件生命周期.doc(14页珍藏版)》请在三一文库上搜索。

1、Flex组件生命周期图nunLIFEDEATH生命周期图之组卄开塩iKecyaeLIFEiniti&icroChildrriOcre9teCompmiete曲求 preinitialize i - i .i! I:lildirnCmlr*r l .idlize Acc es bi t t) flBi i. il f - pl I 这里事件执行有且仪一次LIFE 图In vol idatePropertles)in I ida teDspIovlit f Jin /olid t&SinStcte:commitPropertlesdg etCur rentSk i nS?ate Hnteasu&M

2、upd ai&DssplavLstt)-任何剧性改哼瓷庭亚高匱改宣应用敢变到妙忆元聿(大小逾位空)设定skinChaned -frua 调用 invq fidcrterropertie5()通竜在前山tion餅戢握出诺求,在轴也ti的酚嚴寬威谓求 没有返回类型的定义(方法后面没有:void之类的定义)。可视组件的基本结构所有的Flex可视组件都是 UlComponent类的子类。因此,可视组件将继承UlCompo ne nt中定义的方法、属性、样式、事件和特效。为了创建一个可视组件,我们必须实现类的构造函数。此外,我们还可以有选择的重写一个或多个下列UlComp onent中定义的保护方法。U

3、lComp onent 方法说明commitProperties()提交组件属性的任何变化,或者确认属性的变化是同时 发生的,或者确保属性值按一定顺序设置的。createChildre n()创建组件的子组件。例如,在 ComboBox组件里包含一 个Text In put 控件以及一个Butt on控件作为其子组 件。layoutChrome()为容器类的子类定义容器周围的边框区域。measure()设置组件的默认大小及默认的最小尺寸。updateDisplayList()根据组件的属性和样式,设置组件子元素的大小和位置, 绘制组件使用的皮肤或者图形元素。组件父容器的大小 决定了组件的大小。

4、组件的使用者并不会直接调用这些方法。这些方法将作为初始化过程的一部分,在创建组件时被Flex所调用,或者在调用其他方法时被调用。基本结构详解构造函数如果一个ActionScript类的父类是 UlComponent,或者是UlComponent的某个子类, 声明为public 。没有参数。需要调用super()方法来调用父类的构造函数。每个类只能有一个构造函数;Actio nScript不支持重载构造函数。在构造函数中可以初始化类属性的值,例如,我们可以设置属性和样式的默认值,或者初始化数据结构,例如数组。不要在构造函数中创建子组件;应该只在构造函数中初始化组件的属性。如果需要创建子组件,在

5、createChildren()方法中创建他们。createChildre n()方法如果一个组件中创建了其他组件或者可视对象,那么该组件可以被称为组合组件。例如,FlexComboBox 控件包含一个 Text In put控件来定义 ComboBox的文本区域,以及一个Butt on 控件来定义 ComboBox的箭头。组件通过实现createChildre n()方法来创建子对象(例如其他组件)。我们不会直接调用createChildre n()方法,当我们调用addChild(),将组件加入到其父对象之中的时候,Flex会调用该方法。createChildren() 方法没有对用的失效

6、方法,这意 味着在我们将组件添加到其父对象之中后,我们不需要再次调用该方法(子组件作为组件的一部分,在组件未被销毁期间都是存在的,因此不需要多次创建)。commitProperties()方法我们使用commitProperties()方法来协调对组件属性的更改,大多数情况下,我们协调的是影响到组件如何在屏幕上显示的属性。当调用 invalidateProperties()方法的时候,Flex 会安排一个对 commitProperties ()方法的调用。当我们使用 addChild() 方法将一个组件添加到一个容器中的时候,Flex会自动调用 in validateProperties()

7、方法。对commitProperties() 方法的调用在measure。 方法之前,这使得我们可以在commitProperties()方法中预先设置measure。方法中可能用到的属性的值。使用commitProperties()方法的主要优点在于:*协调对多个属性的更改,使其同时产生效果。例如,我们可能定义了多个属性来控制组件中显示的文本,例如控制组件中文本的对齐方式。文本或者文本对齐方式的变化都需要Flex更新组件的外观。然而,如果我们同时更改了文本和对齐方式,当刷新屏幕的时候,我们只想让Flex执行一次为了重设组件大小或位置而进行的运算。因此,我们使用commitProperties

8、()方法,根据多个属性间的关系来计算任意所需的值。*协调对同一属性的多次更改。我们不希望每次更改同一属性的时候都不必要的执行一次复杂运算。例如,用户更改Butt on 控件的icon属性来改变 Butt on 上显示的图片。根据icon的形状和 大小来计算标签的位置可能是一个计算代价高昂的操作,这使得我们只想在有必要的时候才执行它。为了避免这种行为,我们使用commitProperties()方法来执行这些运算。当Flex刷新显示内容时候,它会调用commitProperties() 方法。这意味着屏幕刷新期间,无论我们更改了多少次icon属性,Flex只在刷新屏幕的时候执行一次上述操作。me

9、asure。 方法measure。 方法用来设置默认的组件大小,以像素为单位,我们也可以在这里设置组件默 认的最小尺寸。当我们调用invalidateSize()方法的时候,Flex会安排一个对measure。 方法的调用。在调用了 in validateSize()方法之后,measure。 方法将在下一次渲染界面的时候执行。当我们使用addChild()方法将组件添加到容器中的时候,Flex会自动调用in validateSize()方法。当我们给组件设定高度和宽度的时候,Flex不会调用 measure。 方法,即使我们显式的调用invalidateSize()方法。这是因为,Flex

10、只在 explicitWidth属性或者explicitHeight 属性为NaN 的时候才调用 measure。 方法。下面的示例中,因为我们显式的设置了Butt on 控件的大小,Flex不会调用measure。 方法:在现有组件的子类中,只有当我们需要修改超类中设置组件大小的规则的时候,我们才实现measure()方法。因此,为了设置新的默认大小,或者为了在运行时执行运算来决定设置我们通过在measure。 方法中设定下列属性的值,来设置组件的默认大小:属性说明measuredHeight measureWidth指疋组件默认的咼度和宽度,以像素为单位。在measure。 方法被调用之前

11、,这些属性的值都为0。虽然我们可以保持 这些属性值都为0,但是这样会使组件在默认情况下不可 见。measuredM inH eight measureMi nWidth指定组件默认的最小高度和最小宽度,以像素为单位。Flex 不能将组件的大小设置的比其指定的最小尺寸还小。measure。 方法仅能够设置组件的默认大小。在updateDisplayList()方法中,组件的父容器将指定组件的真实大小,这可能与其默认尺寸不相同。组件使用者在应用程序中可以通过下列方式来重写组件默认大小的设置:* 设置 explicitHeight和 exlicitWidth属性* 设置width 和height 属

12、性* 设置 percentWidth和 percentHeight 属性如何计算默认大小呢? 一些Flex组件使用静态的大小。例如,无论TextArea 控件里面包含什么样的文本,它的默认大小都为100像素宽、44像素高。如果文本所占的空间比TextArea 控件大,TextArea控件上就会显示出滚动条来。通常情况下,我们根据组件的特征或者传递给组件的信息来设置组件的大小。例如,Button控件的measure。 方法检查其label的文本、边界设置和字体特点来决定其默认大小。layoutChrome() 方法组件大小的规则,我们需要重写measure。 方法。Con tai ner 类,以

13、及一些Con tai ner类的子类,使用layoutChrome()方法来定义容器周围的边框区域。当我们调用 invalidateDisplayList()方法的时候,Flex会安排一个对layoutChrome()方法的调用。在调用了in validateDisplayList()方法之后,layoutChrome() 方法将在下一次渲染界面的时候执行。当我们使用addChild()方法将组件添加到容器中的时候,Flex会自动调用 in validateDisplayList() 方法。通常情况下,我们使用RectangularBorder类来定义容器的边框区域。例如,我们可以创建一个Re

14、ctangularBorder对象,然后在重写的createChildren()方法中将其作为子组件添加到组件中。当我们创建Con tai ner 类的子类的时候,我们可以使用createChildre n() 方法来创建组件的子内容;子内容是容器中容纳的组件。然后我们可以在updateDisplayList() 方法中设置子内容的位置。通常情况下我们使用layoutChrome()方法定义容器的边框区域及设置边框区域的位置,还可以添加其他任何希望出现在边框区域的元素。例如,Panel容器使用layoutChrome()方法来定义其标题区域,其中包括标题的文本和关闭按钮。将容器的内容区域和边框

15、区域分开处理的主要原因在于为了处理Co ntai ner.autoLayout属性被设置为 false的情况。当autoLayout 属性被设置为true,无论何时,只要容器里 面某个子内容的大小或者位置发生了改变,Flex都会重新计算容器和所有子内容的大小及位置。autoLayout属性的默认值为true。当autoLayout属性被设为false,容器及其子内容的大小或位置只会在添加子内容或者移除子内容的时候计算一次。然而,两种情况下,Flex都会执行layoutChrome() 方法。因此,即使autoLayout属性被设为 false,容器依然可以刷新其边框区域。updateDispl

16、ayList()方法组件的updateDisplayList()方法根据前面指定的属性和样式来设置组件的子对象的大小及位置,绘制组件中使用的任何皮肤及图形元素。组件的父容器负责指定组件自身的大小和位置(例如,在容器类的updateDisplayList()方法中设置其子内容的大小和位置)。直到其updateDisplayList()方法被调用,组件是不会显示在屏幕上的。当我们调用invalidateDisplayList() 方法的时候,Flex 会安排一个对 updateDisplayList()方法的调用。在调用了 invalidateDisplayList()方法之后,updateDis

17、playList()方法将在下一次渲染界面的时候执行。当我们使用 addChild() 方法将组件添加到容器中的时候,Flex会自动调用 in validateDisplayList()方法。updateDisplayList()方法的主要用途如下: 设置组件中显示出来的元素的大小和位置。许多组件由一个或多个子组件构成,或者有一些属性用来控制组件中信息的显示。例如,Butt on 控件让我们能够指定一个可选的icon,以及使用labelPlaceme nt属性来指定按钮文本相对图标的显示位置。Butto n.updateDisplayList()方法使用icon及labelPlacement属

18、性来控制按钮的显示。对于容纳了子控件的容器,updateDisplayList()方法控制如何设置其子内容的位置。例如,HBox容器的updateDisplayList()方法将其子内容按从左到右的顺序排为单独的一行;VBox 容器的updateDisplayList()方法将其子内容按从上到下的顺序排为单独的一列。在updateDisplayList()方法中设置子对象的大小的时候,我们需要使用setActualSize() 方法,而不是通过设置控制大小的属性,例如高度和宽度。设置子对象的位置的时候,通过move()方法,而不是设置 x和y属性。绘制组件中必须的可视元素。组件支持许多类型的可

19、视元素,例如皮肤、样式和边框。在updateDisplayList() 方法中,我们可以添加这些可视元素,使用Flash的绘图API绘图,执行对组件外观的额外控制。updateDisplayList()方法有如下签名:protectedfunction updateDisplayList(unscaledWidth :Number ,unscaledHeight:Number):voidun scaledWidth在组件自身的坐标系中,以像素为单位,指定了组件的宽度,与组件的scaleX属性无关。这是由组件的父容器决定的宽度。un scaledHeight在组件自身的坐标系中,以像素为单位,指定了组件的高度,与组件的scaleY属性无关。这是由组件的父容器决定的高度。缩放发生在 Flash Player 或者 AIR中,在 updateDisplayList()方法执行之后。例如,一个组件的 unscaledWidth为 100,它的 scaleY 为 2.0,则在 Flash Player 或者 AIR中,它显示出来的宽度为200.每一个Flex可视组件都是 Flash Sprite 类的子类,因此它们继承了Sprite.graphics 属性。Sprite.graphics属性指定了一个Graphics 对象。我们可以使用这个对象在组件中绘制矢量图形。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1