Flex高级自定义组件(转载)

关于自定义组件,简单的做法是继承一个现有组件,根据需要在该组件里添加需要的其他组件,比如按纽、文本框之类的,加上业务逻辑,通过修改皮肤或者样式来改变组件的外观,这样就构成了一个组件。但是这种做法满足不了更复杂的需求,比如在运行时添加子组件,自定义样式、事件等,这种做法很难实现。

研究 一下API,关于高级自定义组件,通常会做下面的一些事情:

1.改变组件的外观特征。

2.创建一个复杂组件,这个组件由许多其他组件组成。

3.创建一个组件,这个组件是UIComponent的子类。


自定义高级组件时需要重写的几个方法。

flex中所有的可视化组件都是UIComponent的子类,因此,他继承了UIComponent的方法与属性,下面简要介绍一下几个经常重写的方法。


1.commitProperties()


提交任何变化给组件的属性,确保所有变化在同一时间发生或者按一定顺序发生,你可以重写该方法来控制组件外观的显示。当你显示调用invalidateProperties()方法时,就会触发对commitProperties()的调用,这个调用是在下一次渲染期间发生的。当你使用addChild()添加一个组件到容器中时,flex会自动调用invalidateProperties()。commitProperties()执行于measure()方法之前,因此可以在该方法设置一些影响界面大小的属性。


2.createChildren()


创建该组件的子组件。你不用直接调用它来创建组件,flex会在调用addChild()到父容器时执行该方法,因为该方法没有invalidation 方法,所以该方法只执行一次。通常使用该方法来创建组件的内容,使用updateDisplayList()来定位子组件的位置。


3.layoutChrome()


定义容器的边框范围。当你显示调用invalidateDisplayList()方法时,就会触发对layoutChrome()的调用,这个调用也是在下一次渲染期间发生的。当你使用addChild()添加一个组件到容器中时,flex会自动调用invalidateDisplayList()。通常,你会使用 RectangularBorder来定义容器的边框,然后在createChildren()里把他加入显示列表,在layoutChrome()里设置边框的样式与大小并对其定位。


4.measure()


设置组件的默认尺寸和最小尺寸。当显示调用invalidateSize()方法时,就会触发对measure()的调用,这个调用也是在下一次渲染期间发生的。跟其他几个方法一样,当你使用addChild()添加一个组件到容器中时,flex会自动调用invalidateSize()。当你明确指定一个组件的高度或者宽度时,flex不会调用measure(),即使你显示调用了invalidateSize(),flex只会在explicitWidth和explicitHeight为NAN时才调用。


5.updateDisplayList()


根据现有的属性确定子组件的大小和位置,可以在这里绘制组件的皮肤或者一些图形元素。 一个组件只有在调用updateDisplayList()方法后才会显示在屏幕上,这个方法是在调用invalidateDisplayList()时触发的,当你设置组件的宽度或高度事也会触发对该方法的调用。


6.styleChanged()


当设置组件的样式时,就会调用这个方法。如果你自定义了一个样式,你可以重写该方法来对样式做一些处理。
http://blog.sina.com.cn/turnertang
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值