千家信息网

如何使用AS方式重写Flex组件

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,小编给大家分享一下如何使用AS方式重写Flex组件,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!AS方式重写Flex组件常规步骤1、如果有必要,为Flex组件创建所有基于标记(tag
千家信息网最后更新 2025年02月02日如何使用AS方式重写Flex组件

小编给大家分享一下如何使用AS方式重写Flex组件,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

AS方式重写Flex组件常规步骤

1、如果有必要,为Flex组件创建所有基于标记(tag-based)的皮肤(skins)

2、创建ActionScript类文件

1)从一个基类扩展,比如UIComponent或者其他的Flex组件类

2)指定使用者能够通过MXML标记进行设置的属性

3)嵌入(Embed)所有的图片和皮肤文件,文件大小尽可能小

4)实现构造器,可以设置属性和样式的缺省值,或者初始化数据结构,比如数组

5)根据需要,确定是否覆盖以下五个方法:

(a)UIComponent.createChildren()方法,创建Flex组件的子Flex组件

(b)UIComponent.commitProperties()方法,提交Flex组件所有的属性变化,设置measure()方法可能使用的属性值。绝大多数情况下,都是对影响Flex组件如何在屏幕上显示的属性使用这个方法

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

(d)UIComponent.layoutChrome()方法,用于定义容器的边框区域和确定边框区域的位置,以及确定要在边框区域中显示的附加元素。例如,Panel容器使用layoutChrome()方法定义panel容器的title区域,这个区域用来包含title文本和close按钮。
通常,使用RectangularBorder类来定义容器区域的边框,而不是用图片资源去包围Flex组件。比如创建一个RectangularBorder对象,然后在重载的createChildren()方法中,将其作为一个内容子控件添加到Flex组件中,再用updateDisplayList()方法来确定其位置。

◆将容器的内容区域和容器边框区域分开处理的主要原因是为了应对Container.autoLayout
属性被设置为false的这种情况。当autoLayout(自动布局)属性使用默认值true时,只要容器子控件的大小和位置发生变化,容器及子控件就会进行度量和布局。而当其为false时,度量和布局只在子控件被添加或移出容器时才执行。分开处理让Flex在这两种情况下都执行layoutChrome(),从而在autoLayout属性为false的情况下,容器仍能够更新它的边框区域。

(e)UIComponent.updateDisplayList()方法,根据以前所设置的属性和样式来确定Flex组件的子Flex组件在屏幕上的大小(size)及位置(position),并且画出Flex组件所使用的所有皮肤(skins)及图形化元素。Flex组件的父容器负责确定Flex组件本身大小(size)。

要在updateDisplayList()方法中确定一个Flex组件的大小,当子Flex组件是UICOMPONENT时使用setActualSize()方法,而不是UICOMPONENT则使用与Flex组件大小相关的属性width和height。要确定Flex组件的位置,当子Flex组件是UICOMPONENT时使用move()方法,而不是UICOMPONENT则使用x和y属性。一个区别就是move()方法不仅改变了Flex组件位置,而且在调用这个方法之后立即分发了一个move事件,设置x和y属性也更改Flex组件的位置,但却在下一个屏幕更新事件中才会分发move事件。

◆Flex组件支持很多类型的可视元素,比如皮肤,样式和边框。在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

以像素为单位的Flex组件坐标系中,unscaledWidth和unscaledHeight是由父容器确定的Flex组件大小,而不管Flex组件的scaleX,scaleY是多少。缩放发生在FlashPlayer或者AIR中,发生时机是在updateDisplayList()执行之后。比如一个Flex组件的unscaledHeight属性是100,而其scaleY属性是2.0,那么它在FlashPlayer或AIR中出现的高度为200像素。

需要注意的是,定义新Flex组件时不一定要重载所有的五个方法,只需重载实现Flex组件功能所必需的即可。比如实现一个自定义的Button控件,该控件使用新的机制来定义缺省大小(size)。在这种情况下,只需要重载measure()方法。或者,要实现VBox容器的一个新子类。新子类利用VBox类已有的所有有关设定大小(sizing)的逻辑,但是变更了VBox类的布局逻辑以实现从底部到顶部的方式来布局容器中的子控件,而不是自顶向下的布局。在这种情况下,只需要重载updateDisplayList()方法。

(6)增加属性(properties),方法(methods),样式(styles),事件(events)以及元数据

看完了这篇文章,相信你对"如何使用AS方式重写Flex组件"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

组件 方法 属性 容器 区域 大小 边框 位置 控件 布局 情况 元素 方式 事件 样式 皮肤 图形 屏幕 文件 像素 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 java开发服务器有哪些 济南军润网络技术有限公司 广州一诺互联网信息科技 网络安全防护公司服务 信锐网络技术公司合肥地址 geo数据库自带的分析 违反网络安全法第25 软件开发第一学什么条件 华盛顿大学网络安全实验室 怎么导入网络安全法律法规课 软件开发公司股份分配 实验小学网络安全宣传 软件开发公司发展建议 网络安全对话顺口溜 诛仙手游服务器断开怎么回事 数据库释放物理空间很慢 什么是网络技术工程师 宁夏银川政务软件开发 更好地为纳税人缴费人服务器 山南市公安局网络安全 济南军润网络技术有限公司 新世界各个服务器激活有区别么 软件开发qa工作计划表 山西省互联网科技园区 网络安全 原则 审计 漏洞 手机连接服务器错误1007 软件开发 淘汰率 中软软件开发待遇 梦幻西游夫妻转服如何预定服务器 数据库时间段之间的查询
0