• 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

  • 相关阅读:
    MapInfo 文件格式说明
    一个经典编程面试题的“隐退”
    Polar 投影c#版本移植
    关于 tf.nn.softmax_cross_entropy_with_logits 及 tf.clip_by_value
    系列解读Dropout
    python删除所有的中文字符、非ASCII或非英文字符,检查字符串是否包含非ASCII
    Python使用split使用多个字符分隔字符串
    Convolutional Neural Networks for Visual Recognition
    【TensorFlow】tf.nn.conv2d是怎样实现卷积的?
    [TensorFlow] tf.nn.softmax_cross_entropy_with_logits的用法
  • 原文地址:https://www.cnblogs.com/tankaixiong/p/2851511.html
Copyright © 2020-2023  润新知