现在的位置: 首页 > 综合 > 正文

feathers ui 实现机制深入解析(feathers ui 源码解析-原创)feathers ui 换肤

2011年03月19日 ⁄ 综合 ⁄ 共 1541字 ⁄ 字号 评论关闭

一,介绍:

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

【上篇】
【下篇】

抱歉!评论已关闭.