feathers ui 实现机制深入解析(feathers ui 源码解析-原创)
一,介绍:
Feathers是轻量级,易于定制皮肤和扩展的UI组件(适用于移动设备和桌面)。Feathers通过Starling框架,利用GPU的强大能力渲染组件,来实现更加平滑和友好的体验。现在成为Adobe支持的类库!
用途:通过GPU图形加速渲染,得到更好的用户体验,适合应用于PC FLASH游戏平台游戏移值到手机游戏中。
二,主要结构
Feathers提供了主要的类库与主要方法如图
三,详细介绍主要实现机制和类:
1,DisplayListWatcher-核心的类
重要的方法:
public function setInitializerForClass(type:Class, initializer:Function, withName:String = null):void
通过这个方法把类名做为KEY ,方法函数做为值,存入_initializerNoNameTypeMap:Dictionary = new Dictionary(true);(这里有两个字典,一个是带名字参数的,与不带名字参数的)
渲染实现过程:
监听
this.root.addEventListener(Event.ADDED, addedHandler);
然后,通过判断 事件目标对象的类型(Class)为KEY,从Dictionary中找到预先存入的function进行调用。(function一般绑定texture)
2,CustomTheme 自定义主题皮肤:override protected function initialize():void
主要实现过程如下:
//解析图片textrue
const atlasBitmapData:BitmapData = (new ATLAS_IMAGE()).bitmapData;
this.atlas = new TextureAtlas(Texture.fromBitmapData(atlasBitmapData, false), XML(new ATLAS_XML()));
this.defaultTexture =this.atlas.getTexture("hslider-thumb-up-skin");
调用父类的方法进行绑定
this.setInitializerForClass(Button, buttonInitializer);
//buttonInitializer中给相应的组件类设置主题属性
button.defaultSkin =defaultTexture ;
3,UIcomponent自定组件实现类
3.1声明属性,CustomTheme中为对其进行设值defaultSkin:Texture
3.2 override protected function initialize():void-初始化相应操作数据
3.3 重绘方法override protected function draw():void
1,得到 Invalidation flag (用来通知组件发生了什么改变进行区分,FeathersControl中已经提供了一些定义),当改变组件属性时,需要调用父类的 this.invalidate(INVALIDATION_FLAG_SIZE);进行通知。
FeathersControl监听invalidate方法,已经验证是否需要重新调用draw()方法进行重绘。
2,根据flag进行判断,需要重绘哪些部分
3,最后进行排版布局
还可以参考我写的另个一篇,有详细的代码:
feathers ui 换肤
http://www.cnblogs.com/tankaixiong/archive/2013/01/05/2845165.html