• Adobe AIR and Flex


    1.需求描述:

        在对云平台的监控中,我们经常需要在一张图上可视化的描述集群下的物理机所虚拟的虚拟机使用情况,以及超卖情况。那么传统的chart图就不满足我们的需求了,那么要实现这样一个定制化的chart图,反向LIST容器(堆栈容器),可谓是我们的桥梁,如下图:

      

    2、Demo实现

      我们如何实现这样的效果呢?首先,大多数情况下需要一个反向list容器,那么FLEX提供的默认list容器又是从上往下的,很显然不满足我们的需求,

    我们需要自定义一个这样的容器。步骤:

    (1)继承BaseLayout类  (2)重写updateDisplayList()

    3、具体实现

     1 /**
     2  * Created with IntelliJ IDEA.
     3  * @author: DongYang
     4  * Date: 13-7-24
     5  * Time: 上午10:22
     6  * Progress every day a little more.
     7  */
     8 package component.charts.layout
     9 {
    10     import mx.core.ILayoutElement;
    11     import mx.core.UIComponent;
    12     
    13     import spark.layouts.BasicLayout;
    14     
    15     public class StackLayout extends BasicLayout
    16     {
    17         public function StackLayout()
    18         {
    19             super();
    20         }
    21         private var _gap:int = 6;
    22 
    23         public function get gap():int
    24         {
    25             return _gap;
    26         }
    27 
    28         public function set gap(value:int):void
    29         {
    30             _gap = value;
    31            if(!this.target) return;
    32             target.invalidateDisplayList();
    33             target.invalidateSize();
    34         }
    35 
    36         override public function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
    37         {
    38             super.updateDisplayList(unscaledWidth, unscaledHeight);
    39             if(!this.target)  
    40                 return;  
    41             
    42             var layoutElement:ILayoutElement;  
    43             var count:uint = target.numElements;  
    44          
    45             var h : Number = target.height;
    46             var depth:Number=0;
    47             
    48             for (var i:int = 0; i < count; i++)  
    49             {  
    50                 layoutElement = target.getElementAt(i);  
    51                 
    52                 if (!layoutElement || !layoutElement.includeInLayout)  
    53                     continue;  
    54               
    55                 var _eh:Number=UIComponent(layoutElement).height;
    56                 var _y:Number=0;
    57                 if(i==0){
    58                     depth=depth+_eh;
    59                 }else{
    60                     depth=depth+_eh+gap;
    61                 }
    62                 _y=h-depth;
    63                 layoutElement.setLayoutBoundsPosition( 0, _y );
    64             }
    65         }
    66     
    67     }
    68 }
    View Code

    4、使用方法

    让容器的layout实例等于 new StackLayout();

    如:

     1 /**
     2  * Created with IntelliJ IDEA.
     3  * @author: DongYang
     4  * Date: 13-7-25
     5  * Time: 上午11:41
     6  * Progress every day a little more.
     7  */
     8 package component.charts.container {
     9 import component.charts.layout.StackLayout;
    10 
    11 import spark.components.Group;
    12 
    13 public class StackGroup extends Group {
    14     public function StackGroup() {
    15         super();
    16         _lay=new StackLayout();
    17         this.layout=_lay;
    18     }
    19     private var _lay:StackLayout;
    20     private var _gap:Number=6;
    21 
    22     public function get gap():Number {
    23         return _gap;
    24     }
    25 
    26     public function set gap(value:Number):void {
    27         _gap = value;
    28         _lay.gap=value;
    29     }
    30 }
    31 }
    View Code

    其中gap是子元素之间的间隔距离

    这样我们在StackGroup里放子元素的话,就可以看到子元素“入栈”了。

    注:使用StackGroup容器的时候,必须指定它的高度。我们想想在日常生活中,我们要向一个桶里装水,肯定是提前知道它的容量的。

  • 相关阅读:
    objcopy使用
    linux中的strip命令简介
    strace命令详解
    bash执行顺序:alias --> function --> builtin --> program
    Ubuntu下安装docker
    uvm中类继承和phase
    error和exception有什么区别?
    sleep() 和 wait() 有什么区别?
    CSS3实现环形进度条?
    请写出你最常见到的5个runtime exception?
  • 原文地址:https://www.cnblogs.com/yangpigao/p/3216795.html
Copyright © 2020-2023  润新知