Life is Cool! Category

Adobe Flex UIComponent LifeCycle

In: Life is Cool!

(图片来源于jexchan) 重写Flex组件AS方式和MXML方式的采用推荐规则 MXML文件和AS文件最后都会被编译成AS类,只不过MXML编译速度稍慢一些 如果MXML和AS都能完成的一个简单Flex组件,MXML更容易被创建和控制布局 当要覆盖Flex组件的某些方法时只能用AS方式 创建非可视化Flex组件比如Formatter、validator、Effect……时,只能用AS 要为Flex组件添加日志功能时,只能用AS. 参考代码推荐:mx.controls.Button,在SDK里面,现在都是openSouce的,所以可以参考Adobe是怎么写的。 createChildren() 可在自身内部创建其它组件或对象的组件。 无需直接调用此方法,addChild() 方法时,Flex 将调用 createChildren () 方法。也这是因为这种特性,如果UIComponent没有被加载到舞台上,它里面的children是不会被实例化的,也正是新手常常碰到错误的情况之一。 commitProperties() 提交Flex组件所有的属性变化,设置measure()方法可能使用的属性值。绝大多数情况下,都是对影响Flex组件如何在屏幕上显示的属性使用这个方法。 无需直接调用此方法,addChild() 或 invalidateProperties () 方法时,Flex 将调用 commitProperties () 方法。 应在调用 measure() 方法之前调用 commitProperties() 方法。这允许您设置 measure() 方法可能会用到的属性值。 measure() 计算组件的默认大小和(可选)默认最小大小。 measuredWidth measuredHeight measuredMinWidth measuredMinHeight 无需直接调用此方法,addChild() 或 invalidateSize() 方法时,Flex 将调用 measure() 方法。 Container. layoutChrome() layoutChrome是Container特有的生命周期,主要是跟容器边框有关系。 通过设置此容器边框的位置和大小响应大小更改。用于定义容器的边框区域和确定边框区域的位置,以及确定要在边框区域中显示的附加元素。 通常,使用RectangularBorder类来定义容器区域的边框,而不是用图片资源去包围Flex组件。比如创建一个RectangularBorder对象,然后在重载的createChildren()方法中,将其作为一个内容子控件添加到Flex组件中,再用updateDisplayList()方法来确定其位置。 将容器的内容区域和容器边框区域分开处理的主要原因是为了应对Container.autoLayout属性被设置为false的这种情况。当autoLayout(自动布局)属性使用默认值true时,只要容器子控件的大小和位置发生变化,容器及子控件就会进行度量和布局。而当其为false时,度量和布局只在子控件被添加或移出容器时才执行。分开处理让Flex在这两种情况下都执行layoutChrome(),从而在autoLayout属性为false的情况下,容器仍能够更新它的边框区域。 updateDisplayList() 绘制对象和/或设置其子项的大小和位置。 [...]

Adobe Flex Application LifeCycle

In: Life is Cool!

(图片来源于jexchan) Flex的根对象就是SystemManager,而不是我们平常看到的Application。 SystemManager是第一个在Flex应用中被创建的Display Class,继承自flash.dispaly.MovieClip,所以才能实现Preloader和Application的2个frame。 SystemManager有一个topLevelSystemManager对象,指向一个SystemManager实例,是所有当前在flash player运行的任何东西的根(root),如果flex被作为主应用加载到flash player则上述属性将指向其本身(self-refrencing),但当flex应用是被另一flex应用载入的,其自身的SystmenManager的topLevelSystemManager属性则不是自引用了,而是指向其父应用的SystemManager实例。所有UIComponent的子类都有一个systemManager属性指向应用的SystemManager实例,在被SystemManger实例监听的component的事件发生冒泡时,其将拥有事件处理链上最后的处理权。 Preloader Preloader是一个轻量级的类,在systemManager的第一帧被实例化,preloader会dispatch出一系列的事件,由progress bar监听实现loading界面,一旦应用进入第二帧待application初始化后会借由system manager通知preloader初始化进度,preloader通知system manager其准备待删除,主要是一些初始化设定和下载runtime share library。 Preloader的事件:  progress Indicates download progress complete Indicates that the download is complete rslError Indicates that a runtime shared library could not load rslProgress Indicates the download progress for a runtime shared library rslComplete Indicates that the download is complete for runtime [...]

意大利佛罗伦萨

In: Life is Cool!

蜜月之旅 之 意大利佛罗伦萨 佛罗伦萨让我想到第一个单词是Florentia,而在意大利叫做Firenze。佛罗伦萨比威尼斯要干净得多,但更干净得应该是后面的罗马。整个城市被很多的Benz Smart广告充斥着,售价10万rmb不到一点。感慨欧洲买车真得很便宜,路上都是奔驰,宝马,其他牌子车几乎没有。 佛罗伦萨是文艺复兴的产生地,也曾经是意大利的首都之一。 百花大教堂,欧洲第四大教堂 黄金天堂之门 领主广场上,旁边就是乌菲兹美术馆 科西莫一世青铜骑马像 神曲但丁 海神喷泉 海格力斯和凯克斯

意大利比萨斜塔

In: Life is Cool!

蜜月之旅 之 意大利比萨斜塔 原来比萨斜塔是在意大利的比萨小镇上的奇迹广场内,被围墙所包围。大片草坪上散布着一组宗教建筑,它们是大教堂(建造于1063年—13世纪)、洗礼堂(建造于1153年—14世纪)、钟楼(即比萨斜塔)和墓园(建造于1174年)。 真得看上去会倒哦!

意大利威尼斯

In: Life is Cool!

蜜月之旅 之 意大利威尼斯 来到意大利后就可以发现这个国家比起法国,瑞士来是多么得脏乱,法国更像是我所想和期望的欧洲城市。 威尼斯-将要消逝的城市,他曾经也是国家的名字,最终被拿破仑所征服,后来又被合并成意大利。 威尼斯整个城市只靠一条长堤与意大利大陆半岛连接,这是运行在长堤上的火车。(我很喜欢欧洲的涂鸦) 登录威尼斯,这里的黑人非常多,你要非常小心,保管好自己的财物。 徐志摩笔下的叹息桥,已经被广告所包装。 欢迎来到圣马可广场和教堂 贡多拉(Gondola) – 独具特色的威尼斯尖舟 贡多拉船夫除了会划船,还会唱歌,最牛X的,不少还会说中文。到马可波罗的房子那里,一直用中文跟我们说,“马可波罗的房子”。 马可波罗的房子record video了,忘记相片了。BTW,威尼斯的水有点臭,哈哈哈。 日落的威尼斯