zoukankan      html  css  js  c++  java
  • 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容器的时候,必须指定它的高度。我们想想在日常生活中,我们要向一个桶里装水,肯定是提前知道它的容量的。

  • 相关阅读:
    MapReduce程序遇见java.net.UnknownHostException
    吐槽下《Hadoop权威指南(第二版)》的翻译
    HFileOutputFormat与TotalOrderPartitioner
    关于hive multi group by的疑惑
    Hive解决 java.io.IOException:SerDeException:LazySimpleSerDe
    一个字符编码引发的血案
    CSS颜色代码大全
    C#中ParameterizedThreadStart和ThreadStart区别
    Sql Server REPLACE函数的使用
    QueryString的用法
  • 原文地址:https://www.cnblogs.com/yangpigao/p/3216795.html
Copyright © 2011-2022 走看看