在FlexSDK3中存在mx.graphics包,其中是对flash.display.Graphics的再包装。目的是提供使用便利的绘图API。
但是mx.graphics包在SDK3中却几乎没有被使用。而随着SDK4中可视组件架构的重构,mx.graphics包被大量使用。
mx.graphics包是SDK4中可视组件架构的重构的重要因素。
说到重构的思路和方法,就要先说说MXML形式的源代码文件。
MXML形式的源代码文件说白了就是纯粹的As代码换了身行头、穿了身马甲,本质上还是As。只不过MXML形式非常结构化,非常适合画面构图的需求。
mxmlc编译器最终还是要把它先转换为纯粹的As代码,然后再调用As编译器完成swf文件的编译。
SDK4中可视组件架构和SDK3的主要不同点之一是皮肤(Skin)的可换性和灵活性上。
皮肤不是逻辑,属于画面构图的范畴,因此用MXML形式最合适。
怎么样才能编写MXML形式的代码呢?
我们知道,Flex程序的外观元素都是用底层flash.display.Graphics画出来的。
能不能直接flash.display.Graphics中各个元素用MXML形式来表现呢?不行,FlexBuilder或mxmlc编译器不能识别底层的API。
如果把flash.display.Graphics包装一下,成为类,那么就可以用MXML形式来编写了。
SDK4中可视组件架构就是这么做的。
灵活的组件架构的代价就是编译出的swf文件体积更大了。
有舍才有得嘛。
值得吗?考虑下。