zoukankan      html  css  js  c++  java
  • as3饼图

    先看效果:填入统计数据后,再查看。。。。。。

    DrawPieGraph.as

      1package CYPL.Graphics{
      2    import fl.transitions.Tween;
      3    import fl.transitions.easing.*;
      4    import fl.transitions.TweenEvent;
      5    import flash.display.MovieClip;
      6    import flash.display.Sprite;
      7    import flash.display.Shape;
      8    import flash.display.Graphics;
      9    import flash.events.MouseEvent;
     10    import flash.text.*;
     11    public class DrawPieGraph extends MovieClip {
     12
     13        //存放shape对象
     14        private var __contain:Object;
     15        //设置角度从-90开始
     16        private var R:int = -90;
     17        private var D:uint = 30;
     18        private var _shape:Shape;
     19        //初始饼图的圆心位置
     20        private var _x0:Number;
     21        private var _y0:Number;
     22        //椭圆饼图的长轴与短轴长度
     23        private var _a:Number;
     24        private var _b:Number;
     25        //饼图的厚度
     26        private var _h:Number;
     27        //透明度
     28        private var _alpha:Number;
     29        //数据列表
     30        private var _nameList:Array;
     31        private var _dataList:Array;
     32        private var _colorList:Array;
     33        private var _angleList:Array;
     34        private var _depthList:Array;
     35        //
     36        private var _tween1:Tween;
     37        private var _tween2:Tween;
     38        private var showorder:Boolean;
     39        private var percent:Boolean;
     40        private var fontcolor:uint;
     41        private var orderx:Number;
     42        private var ordery:Number;
     43        private var orderxy:Number;
     44        private var shape:Array;
     45        private var sp:Sprite;
     46        private var Rect:Sprite;
     47        private var namelabel:TextField;
     48
     49
     50        /**==========================15个参数==================================================================================
     51        *@param:x0>圆心x坐标=========1
     52        *@param:y0>圆心y坐标=========2
     53        *@param:a>长轴===============3
     54        *@param:b>短轴================4
     55        *@param:h>厚度=================5
     56        *@alpha:Number>透明度===============6
     57        *@param:dataList>数据列表(有默认值)===============7
     58        *@param:dataList>颜色列表(有默认值)==================8
     59        *@param:dataList>名称列表(有默认值)==================9
     60        *@param:dataList>是否显示百分比==================10
     61        *@param:dataList>百分比字体颜色==================11
     62        *@param:dataList>是否显示图例==================12
     63        *@param:dataList>图例x坐标==================13
     64        *@param:dataList>图例y坐标==================14
     65        *@param:dataList>图例间距==================15
     66        */

     67        public function DrawPieGraph(x0:Number,y0:Number,a:Number,b:Number,h:Number,Alpha:Number,dataList:Array,colorList:Array,nameList:Array,ifpercent:Boolean,perColor:uint ,ifshoworder:Boolean, myorderx:Number, myordery:Number, myorderxy:Number) {
     68            _x0 = x0;
     69            _y0 = y0;
     70            _a = a;
     71            _b = b;
     72            _h = h;
     73            percent = ifpercent;
     74            fontcolor = perColor;
     75            showorder = ifshoworder;
     76            orderx = myorderx;
     77            ordery = myordery;
     78            orderxy = myorderxy;
     79            _nameList = nameList;
     80            _alpha = Alpha;
     81            _colorList = colorList == null ? [0x330099,0x04D215,0x7E9B06,0x990065,0xFF9E01,0xFF6600,0xFE9A9A,0xA00101,0xFCD202]:colorList;
     82            sp=new Sprite();
     83            sp.mouseEnabled = sp.mouseChildren = false;
     84            ToolTip.init(sp);
     85            render(dataList);
     86        }

     87        public function render(dataList:Array ) {
     88            
     89            R = -90;
     90            setAngleList(dataList);
     91            clearAll();
     92            drawRect();
     93            drawPie();
     94        }

     95
     96        private function setAngleList(dataList:Array):void {
     97            _dataList = dataList == null ? [1,1,1,1,1,1,1,1]:dataList;
     98            _angleList = [];
     99            var totalData:int;
    100            var len:uint = _dataList.length;
    101            for (var j:uint=0; j < len; j++{
    102                totalData += _dataList[j];
    103            }

    104            if (totalData==0{
    105                for (j=0; j < len; j++{
    106                    _dataList[j]=1;
    107                    totalData=len;
    108                }

    109            }

    110
    111            for (j=0; j < len; j++{
    112                if (j==len-1{
    113                    _angleList.push([R,270]);
    114                }
     else {
    115                    var r:uint=Math.floor(_dataList[j]/totalData*360);
    116                    var posR:int=R+r;
    117                    _angleList.push([R,posR]);
    118                    R=posR;
    119                }

    120            }

    121            for (j=len-1; j >0; j--{
    122                
    123                if(_dataList[j]!=0){
    124                    _angleList.splice(j, 1,[_angleList[j][0],270]);
    125                    break;
    126                    }

    127                
    128                
    129            }

    130
    131        }

    132        private function setDepths():void {
    133            _depthList=[];
    134            var len:uint=_angleList.length;
    135            for (var j:uint=0; j < len; j++{
    136                var minJ:Number=_angleList[j][0];
    137                var maxJ:Number=_angleList[j][1];
    138                switch (true{
    139                    case minJ >= -90 && minJ <= 90 && maxJ<=90 :
    140                        _depthList[j]=minJ;
    141                        break;
    142                    default :
    143                        _depthList[j]=1000-minJ;
    144                }

    145            }

    146            _depthList=_depthList.sort(Array.NUMERIC|Array.RETURNINDEXEDARRAY);
    147            for (j=0; j<len; j++{
    148                if (this.contains(__contain["shape"+_depthList[j]])) {
    149                    setChildIndex(__contain["shape"+_depthList[j]],j);
    150                }

    151            }

    152        }

    153        private function drawRect():void {
    154            if (showorder) {
    155                for (var jk:uint=0; jk < _angleList.length; jk++{
    156                    Rect=new Sprite  ;//图例方块
    157                    addChild(Rect);
    158                    Rect.name="abcde"+jk;
    159                    if (_dataList[jk]!=0{
    160                        Rect.buttonMode=true;
    161                    }

    162                    namelabel=new TextField  ;//图例的文字说明,它和方块同为pie的子级
    163                    //namelabel.text=_nameList[jk];
    164                    namelabel.selectable=false;
    165                    namelabel.autoSize=TextFieldAutoSize.LEFT;
    166                    namelabel.htmlText="<font size='16' color='#ffffff' face='黑体' >"+_nameList[jk]+"</font>";
    167                    //下划线效果namelabel.htmlText= "<font size='16' color='#ffffff' face='黑体' >"+"<u>"+_nameList[jk]+"</u>"+"</font>";
    168                    addChild(namelabel);
    169                    var beginx:Number=orderx;
    170                    var beginy:Number=ordery;
    171                    var jianxy:Number=orderxy+12;//图例方块的边长
    172                    if (_dataList[jk]!=0{
    173                        Rect.graphics.beginFill(_colorList[jk],1);
    174                    }

    175                    Rect.graphics.lineStyle(1,0xffffff,1);
    176                    Rect.graphics.moveTo(0,0);
    177                    Rect.graphics.lineTo(12,0);
    178                    Rect.graphics.lineTo(12,12);
    179                    Rect.graphics.lineTo(0,12);
    180                    Rect.graphics.lineTo(0,0);
    181                    if (_dataList[jk]!=0{
    182                        Rect.graphics.endFill();
    183                    }

    184                    Rect.x=beginx;
    185                    Rect.y=beginy+jianxy*jk;
    186                    namelabel.x=Rect.x+20;
    187                    namelabel.y=Rect.y-4;
    188                    _dataList[jk]!=0?Rect.addEventListener(MouseEvent.MOUSE_OVER,onMouseDownX):0;
    189                }

    190            }

    191
    192
    193        }

    194        public function drawPie():void {
    195            __contain={};
    196            var len:uint=_angleList.length;
    197            var step:uint=1;
    198
    199            shape=new Array();
    200            for (var j:uint=0; j < len; j++{
    201
    202                __contain["shape"+j]=new MovieClip  ;
    203                addChild(__contain["shape"+j]);
    204                shape.push(__contain["shape" + j]);
    205                if (_dataList[j]!=0{
    206
    207                    __contain["shape"+j].out=false;
    208                    //设置中心角,方便以下进行中点移动
    209                    __contain["shape"+j].r=(_angleList[j][0]+_angleList[j][1])/2;
    210                    __contain["shape"+j].addEventListener(MouseEvent.MOUSE_DOWN,onMouseDownX);
    211
    212                    ToolTip.register(__contain["shape"+j], _nameList[j]);
    213                    __contain["shape"+j].name="shape"+j;
    214                    var drakColor:uint=getDarkColor(_colorList[j]);//深色
    215                    var g:Graphics=__contain["shape"+j].graphics;
    216                    //====================================================================================================先画百分比
    217                    if (percent) {
    218                        /*g.beginFill(0x000000,_alpha);
    219                                    g.lineStyle(1, 0x000000, 1);
    220                                    if(0<(_angleList[j][0]+ _angleList[j][1])/2 &&(_angleList[j][0]+ _angleList[j][1])/2<180 ){
    221                                      g.moveTo(getRPoint(_x0, _y0+_h, _a, _b, (_angleList[j][0] + _angleList[j][1] ) / 2).x,getRPoint(_x0, _y0+_h, _a, _b, (_angleList[j][0] + _angleList[j][1] ) / 2).y);
    222                                          g.lineTo(getRPoint(_x0,_y0+_h, 20*_a, 20*_b, (_angleList[j][0] + _angleList[j][1] ) / 2).x,getRPoint(_x0, _y0+_h, 20*_a, 20*_b, (_angleList[j][0] + _angleList[j][1] ) / 2).y);
    223                                          }else{        
    224                                           g.moveTo(getRPoint(_x0, _y0, _a, _b, (_angleList[j][0] + _angleList[j][1] ) / 2).x,getRPoint(_x0, _y0, _a, _b, (_angleList[j][0] + _angleList[j][1] ) / 2).y);
    225                                           g.lineTo(getRPoint(_x0,_y0, 20*_a, 20*_b, (_angleList[j][0] + _angleList[j][1] ) / 2).x,getRPoint(_x0, _y0, 20*_a, 20*_b, (_angleList[j][0] + _angleList[j][1] ) / 2).y);
    226                                    }
    227                                    g.endFill()*/

    228                        var total:Number=0;
    229                        for (var jh:uint=0; jh <_dataList.length; jh++{
    230                            total+=_dataList[jh];
    231                        }

    232                        var prelabel:TextField=new TextField  ;
    233                        prelabel.text=String(Math.floor((_dataList[j]/total)*10000)/100)+"%";
    234                        prelabel.selectable=false;
    235                        prelabel.background=true;
    236                        prelabel.backgroundColor=drakColor;
    237                        __contain["shape"+j].addChild(prelabel);
    238                        var myformat:TextFormat = new TextFormat();
    239                        myformat.font="Verdana";
    240                        myformat.size=12;
    241                        myformat.color=0xffffff;
    242                        prelabel.setTextFormat(myformat);
    243                        prelabel.gridFitType="pixel";
    244                        prelabel.antiAliasType="advanced";
    245                        prelabel.sharpness=-400;
    246                        prelabel.autoSize=TextFieldAutoSize.LEFT;
    247                        var zhongwei:Number=(_angleList[j][0+ _angleList[j][1] ) / 2;
    248                        if (zhongwei>0&&zhongwei<90{
    249                            prelabel.x=getRPoint(_x0,_y0+_h,_a,_b,zhongwei).x;
    250                            prelabel.y=getRPoint(_x0,_y0+_h,_a,_b,zhongwei).y;
    251                        }
     else if (zhongwei>90 && zhongwei<180{
    252                            prelabel.x=getRPoint(_x0,_y0+_h,_a,_b,zhongwei).x-prelabel.width;
    253                            prelabel.y=getRPoint(_x0,_y0+_h,_a,_b,zhongwei).y;
    254                        }
     else if (zhongwei>180 && zhongwei<270{
    255                            prelabel.x=getRPoint(_x0,_y0,_a,_b,zhongwei).x-prelabel.width;
    256                            prelabel.y=getRPoint(_x0,_y0,_a,_b,zhongwei).y-prelabel.height;
    257                        }
     else if (zhongwei>-90 && zhongwei<0{
    258                            prelabel.x=getRPoint(_x0,_y0,_a,_b,zhongwei).x;
    259                            prelabel.y=getRPoint(_x0,_y0,_a,_b,zhongwei).y-prelabel.height;
    260                        }
     else if (zhongwei == 0{
    261                            prelabel.x=getRPoint(_x0,_y0,_a,_b,zhongwei).x;
    262                            prelabel.y=getRPoint(_x0,_y0,_a,_b,zhongwei).y-prelabel.height/2;
    263                        }
     else if (zhongwei == 90{
    264                            prelabel.x=getRPoint(_x0,_y0+_h,_a,_b,zhongwei).x-prelabel.width/2;
    265                            prelabel.y=getRPoint(_x0,_y0+_h+1,_a,_b,zhongwei).y;
    266                        }
     else if (zhongwei == 180{
    267                            prelabel.x=getRPoint(_x0,_y0,_a,_b,zhongwei).x-prelabel.width;
    268                            prelabel.y=getRPoint(_x0,_y0,_a,_b,zhongwei).y-prelabel.height/2;
    269                        }

    270                    }

    271                    //-------------------------------------- //内弧
    272                    //g.lineStyle(1);
    273                    //先画底
    274                    //内弧
    275                    g.lineStyle(1,drakColor,_alpha);
    276                    g.beginFill(_colorList[j],_alpha);
    277                    g.moveTo(_x0,_y0+_h);
    278                    var r:Number=_angleList[j][0];
    279                    var minR:Number=r;
    280                    var maxR:int=_angleList[j][1];
    281                    while (r + step < maxR) {
    282                        g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,r).x,getRPoint(_x0,_y0 + _h,_a,_b,r).y);
    283                        r+=step;
    284                    }

    285                    g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,maxR).x,getRPoint(_x0,_y0 + _h,_a,_b,maxR).y);
    286                    g.endFill();
    287                    //画内侧面
    288                    g.lineStyle(1,drakColor,_alpha);
    289                    g.beginFill(drakColor,_alpha);
    290                    g.moveTo(_x0,_y0+_h);
    291                    g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,minR).x,getRPoint(_x0,_y0 + _h,_a,_b,minR).y);
    292                    g.lineTo(getRPoint(_x0,_y0,_a,_b,minR).x,getRPoint(_x0,_y0,_a,_b,minR).y);
    293                    g.lineTo(_x0,_y0);
    294                    g.endFill();
    295                    //画外侧面
    296                    g.lineStyle(1,drakColor,1);
    297                    g.beginFill(drakColor,_alpha);
    298                    g.moveTo(_x0,_y0+_h);
    299                    g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,maxR).x,getRPoint(_x0,_y0 + _h,_a,_b,maxR).y);
    300                    g.lineTo(getRPoint(_x0,_y0,_a,_b,maxR).x,getRPoint(_x0,_y0,_a,_b,maxR).y);
    301                    g.lineTo(_x0,_y0);
    302                    g.endFill();
    303                    //画外弧侧面
    304                    //画外弧侧面
    305                    //--------------------------------
    306                    //下边高
    307                    //下边外侧边高
    308                    if (minR<=0&&maxR>=0&&maxR<=180{
    309                        //解决90度时外侧面,显示事实为90度,实际为0度,因为我们整个旋转了-90度;
    310                        g.lineStyle(1,drakColor,1);
    311                        g.beginFill(drakColor,1);
    312                        g.moveTo(getRPoint(_x0,_y0 + _h,_a,_b,minR).x,getRPoint(_x0,_y0 + _h,_a,_b,minR).y);
    313                        var k:Number=minR;
    314                        while (k < 0{
    315                            k+=step;
    316                            g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,k).x,getRPoint(_x0,_y0 + _h,_a,_b,k).y);
    317                        }

    318                        g.lineTo(getRPoint(_x0,_y0,_a,_b,0).x,getRPoint(_x0,_y0,_a,_b,0).y);
    319                        while (k > minR) {
    320                            k-=step;
    321                            g.lineTo(getRPoint(_x0,_y0,_a,_b,k).x,getRPoint(_x0,_y0,_a,_b,k).y);
    322                        }

    323                        g.endFill();
    324                        g.lineStyle(1,drakColor,1);
    325                        g.beginFill(drakColor,1);
    326                        g.moveTo(getRPoint(_x0,_y0 + _h,_a,_b,0).x,getRPoint(_x0,_y0 + _h,_a,_b,0).y);
    327                        k=0;
    328                        while (k < maxR) {
    329                            k+=step;
    330                            g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,k).x,getRPoint(_x0,_y0 + _h,_a,_b,k).y);
    331                        }

    332                        g.lineTo(getRPoint(_x0,_y0,_a,_b,maxR).x,getRPoint(_x0,_y0,_a,_b,maxR).y);
    333                        while (k > 0{
    334                            k-=step;
    335                            g.lineTo(getRPoint(_x0,_y0,_a,_b,k).x,getRPoint(_x0,_y0,_a,_b,k).y);
    336                        }

    337                        g.endFill();
    338                    }
     else if (maxR >= 180 && minR <= 180 && minR >= 0{
    339                        //解决180度时外侧面,显示事实为270度,实际为180度,因为我们整个旋转了-90度;
    340                        g.lineStyle(1,drakColor,1);
    341                        g.beginFill(drakColor,1);
    342                        g.moveTo(getRPoint(_x0,_y0 + _h,_a,_b,minR).x,getRPoint(_x0,_y0 + _h,_a,_b,minR).y);
    343                        k=minR;
    344                        while (k < 180{
    345                            k+=step;
    346                            g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,k).x,getRPoint(_x0,_y0 + _h,_a,_b,k).y);
    347                        }

    348                        g.lineTo(getRPoint(_x0,_y0,_a,_b,180).x,getRPoint(_x0,_y0,_a,_b,180).y);
    349                        while (k > minR) {
    350                            k-=step;
    351                            g.lineTo(getRPoint(_x0,_y0,_a,_b,k).x,getRPoint(_x0,_y0,_a,_b,k).y);
    352                        }

    353                        g.endFill();
    354                        g.lineStyle(1,drakColor,1);
    355                        g.beginFill(drakColor,1);
    356                        g.moveTo(getRPoint(_x0,_y0 + _h,_a,_b,180).x,getRPoint(_x0,_y0 + _h,_a,_b,180).y);
    357                        k=180;
    358                        while (k < maxR) {
    359                            k+=step;
    360                            g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,k).x,getRPoint(_x0,_y0 + _h,_a,_b,k).y);
    361                        }

    362                        g.lineTo(getRPoint(_x0,_y0,_a,_b,maxR).x,getRPoint(_x0,_y0,_a,_b,maxR).y);
    363                        while (k > 180{
    364                            k-=step;
    365                            g.lineTo(getRPoint(_x0,_y0,_a,_b,k).x,getRPoint(_x0,_y0,_a,_b,k).y);
    366                        }

    367                        g.endFill();
    368                    }
     else if (minR <= 0 && maxR >= 180{
    369                        //解决同时处于0度和180度的情况
    370                        g.lineStyle(1,drakColor,1);
    371                        g.beginFill(drakColor,1);
    372                        g.moveTo(getRPoint(_x0,_y0 + _h,_a,_b,minR).x,getRPoint(_x0,_y0 + _h,_a,_b,minR).y);
    373                        k=minR;
    374                        while (k < 0{
    375                            k+=step;
    376                            g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,k).x,getRPoint(_x0,_y0 + _h,_a,_b,k).y);
    377                        }

    378                        g.lineTo(getRPoint(_x0,_y0,_a,_b,0).x,getRPoint(_x0,_y0,_a,_b,0).y);
    379                        while (k > minR) {
    380                            k-=step;
    381                            g.lineTo(getRPoint(_x0,_y0,_a,_b,k).x,getRPoint(_x0,_y0,_a,_b,k).y);
    382                        }

    383                        g.endFill();
    384                        g.lineStyle(1,drakColor,1);
    385                        g.beginFill(drakColor,1);
    386                        g.moveTo(getRPoint(_x0,_y0 + _h,_a,_b,0).x,getRPoint(_x0,_y0 + _h,_a,_b,0).y);
    387                        k=0;
    388                        while (k < 180{
    389                            k+=step;
    390                            g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,k).x,getRPoint(_x0,_y0 + _h,_a,_b,k).y);
    391                        }

    392                        g.lineTo(getRPoint(_x0,_y0,_a,_b,180).x,getRPoint(_x0,_y0,_a,_b,180).y);
    393                        while (k > 0{
    394                            k-=step;
    395                            g.lineTo(getRPoint(_x0,_y0,_a,_b,k).x,getRPoint(_x0,_y0,_a,_b,k).y);
    396                        }

    397                        g.endFill();
    398                        g.lineStyle(1,drakColor,1);
    399                        g.beginFill(drakColor,1);
    400                        g.moveTo(getRPoint(_x0,_y0 + _h,_a,_b,180).x,getRPoint(_x0,_y0 + _h,_a,_b,180).y);
    401                        k=180;
    402                        while (k < maxR) {
    403                            k+=step;
    404                            g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,k).x,getRPoint(_x0,_y0 + _h,_a,_b,k).y);
    405                        }

    406                        g.lineTo(getRPoint(_x0,_y0,_a,_b,maxR).x,getRPoint(_x0,_y0,_a,_b,maxR).y);
    407                        while (k > 180{
    408                            k-=step;
    409                            g.lineTo(getRPoint(_x0,_y0,_a,_b,k).x,getRPoint(_x0,_y0,_a,_b,k).y);
    410                        }

    411                        g.endFill();
    412                    }
     else {
    413                        g.lineStyle(1,drakColor,1);
    414                        g.beginFill(drakColor,1);
    415                        g.moveTo(getRPoint(_x0,_y0 + _h,_a,_b,minR).x,getRPoint(_x0,_y0 + _h,_a,_b,minR).y);
    416                        k=minR;
    417                        while (k < maxR) {
    418                            k+=step;
    419                            g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,k).x,getRPoint(_x0,_y0 + _h,_a,_b,k).y);
    420                        }

    421                        //g.lineTo(getRPoint(_x0, _y0+_h, _a, _b, maxR).x, getRPoint(_x0, _y0+_h, _a, _b, maxR).y);
    422                        g.lineTo(getRPoint(_x0,_y0,_a,_b,k).x,getRPoint(_x0,_y0,_a,_b,k).y);
    423                        while (k > minR) {
    424                            k-=step;
    425                            g.lineTo(getRPoint(_x0,_y0,_a,_b,k).x,getRPoint(_x0,_y0,_a,_b,k).y);
    426                        }

    427                        g.endFill();
    428                    }

    429                    //画上表面
    430                    g.lineStyle(1,_colorList[j],_alpha);
    431                    g.beginFill(_colorList[j],_alpha);
    432                    g.moveTo(_x0,_y0);
    433                    r=minR;
    434                    while (r + step < maxR) {
    435                        g.lineTo(getRPoint(_x0,_y0,_a,_b,r).x,getRPoint(_x0,_y0,_a,_b,r).y);
    436                        r+=step;
    437                    }

    438                    g.lineTo(getRPoint(_x0,_y0,_a,_b,maxR).x,getRPoint(_x0,_y0,_a,_b,maxR).y);
    439                    g.endFill();
    440                }

    441            }

    442            setDepths();
    443            addChild(sp);//提示标签加在这里,防止标签被饼块遮住
    444        }

    445        private function onMouseDownX(e:MouseEvent):void {
    446            var TG:MovieClip=shape[Number(e.currentTarget.name.substring(5))] as MovieClip;
    447            var posX:Number=getRPoint(0,0,D,D,TG.r).x;
    448            var posY:Number=getRPoint(0,0,D,D,TG.r).y;
    449            if (! TG.out) {
    450                TG.removeEventListener(MouseEvent.MOUSE_DOWN,onMouseDownX);
    451                TG["tweenX"]=new Tween(TG,"x",Bounce.easeOut,0,posX,1.5,true);
    452                TG["tweenY"]=new Tween(TG,"y",Bounce.easeOut,0,posY,1.5,true);
    453            }
     else {
    454                TG.removeEventListener(MouseEvent.MOUSE_DOWN,onMouseDownX);
    455                TG["tweenX"]=new Tween(TG,"x",Bounce.easeOut,TG.x,0,1,true);
    456                TG["tweenY"]=new Tween(TG,"y",Bounce.easeOut,TG.y,0,1,true);
    457            }

    458            TG["tweenX"].addEventListener(TweenEvent.MOTION_FINISH,onMotionFinish);
    459        }

    460
    461        //===============================================================================
    462        private function onMotionFinish(e:TweenEvent):void {
    463            var TG:MovieClip=e.currentTarget.obj as MovieClip;
    464            TG["tweenX"].removeEventListener(TweenEvent.MOTION_FINISH,onMotionFinish);
    465            TG.out=! TG.out?true:false;
    466            TG.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDownX);
    467        }

    468        private function getDarkColor(color:uint):uint {
    469            var r:uint=color>>16&0xFF/1.3;//设置red通道的值
    470            var g:uint=color>>8&0xFF/1.3;//设置green通道的值
    471            var b:uint=color&0xFF/1.1;//设置blue通道的值
    472            return r << 16 | g << 8 | b;//得到新颜色
    473        }

    474        private function getRPoint(x0:Number,y0:Number,a:Number,b:Number,r:Number):Object {
    475            r=r*Math.PI/180;
    476            return {x:Math.cos(r) * a + x0,y:Math.sin(r) * b + y0};
    477        }

    478        public function get contain():Object {
    479            return __contain;
    480        }

    481        private function clearAll():void {//清除内容
    482        
    483            var len:uint=_dataList.length;
    484            while(this.numChildren!=0){
    485                removeChildAt(0);
    486                }

    487            for (var j:uint=0; j<len; j++{
    488                
    489                if (__contain) {
    490                    __contain["shape"+j]=null;
    491                }

    492            }

    493            
    494            Rect=null;
    495
    496        }

    497    }

    498}


    ToolTip.as

      1 package CYPL.Graphics
      2 {
      3     
      4     import flash.accessibility.AccessibilityProperties;
      5     import flash.display.*;
      6     import flash.events.*;
      7     import flash.geom.Point;
      8     import flash.text.*;
      9     /**
     10      * @link kinglong@gmail.com
     11      * @author Kinglong
     12      * @version 0.1
     13      * @since 20090608
     14      * @playerversion fp9+
     15      * 热区提示
     16      */    
     17     public class ToolTip extends Sprite    {
     18         private static var instance:ToolTip = null;
     19         private var label:TextField;        
     20         private var area:DisplayObject;
     21         public function ToolTip() {
     22             label = new TextField();
     23             label.autoSize = TextFieldAutoSize.LEFT;
     24             label.selectable = false;
     25             label.multiline = false;
     26             label.wordWrap = false;
     27             label.defaultTextFormat = new TextFormat("宋体"120x666666);
     28             label.text = "提示信息";
     29             label.x = 5;
     30             label.y = 2;
     31             addChild(label);
     32             redraw();
     33             visible = false;
     34             mouseEnabled = mouseChildren = false;
     35         }
     36         
     37         private function redraw() {
     38             var w:Number = 10 + label.width;
     39             var h:Number = 4 + label.height;            
     40             this.graphics.clear();
     41             this.graphics.beginFill(0x0000000.4);
     42             this.graphics.drawRoundRect(33, w, h, 55);                
     43             this.graphics.moveTo(63 + h);
     44             this.graphics.lineTo(123 + h);
     45             this.graphics.lineTo(98 + h);
     46             this.graphics.lineTo(63 + h);
     47             this.graphics.endFill();
     48             this.graphics.beginFill(0xffffff);
     49             this.graphics.drawRoundRect(00, w, h, 55);
     50             this.graphics.moveTo(3, h);
     51             this.graphics.lineTo(9, h);
     52             this.graphics.lineTo(65 + h);
     53             this.graphics.lineTo(3, h);
     54             this.graphics.endFill();
     55         }
     56         
     57         public static function init(base:DisplayObjectContainer) {
     58             if (instance == null) {
     59                 instance = new ToolTip();
     60                 base.addChild(instance);                
     61             }
     62         }
     63         
     64         public static function register(area:DisplayObject, message:String):void {
     65             if(instance != null){
     66                 var prop:AccessibilityProperties = new AccessibilityProperties();
     67                 prop.description = message;
     68                 area.accessibilityProperties = prop;
     69                 area.addEventListener(MouseEvent.MOUSE_OVER, instance.handler);
     70             }
     71         }
     72         
     73         public static function unregister(area:DisplayObject):void {
     74             if (instance != null) {
     75                 area.removeEventListener(MouseEvent.MOUSE_OVER, instance.handler);
     76             }
     77         }
     78         
     79         public function show(area:DisplayObject):void {
     80             this.area = area;
     81             this.area.addEventListener(MouseEvent.MOUSE_OUT, this.handler);
     82             this.area.addEventListener(MouseEvent.MOUSE_MOVE, this.handler);
     83             label.text = area.accessibilityProperties.description;
     84             redraw();            
     85         }
     86 
     87         
     88         public function hide():void    {
     89             this.area.removeEventListener(MouseEvent.MOUSE_OUT, this.handler);
     90             this.area.removeEventListener(MouseEvent.MOUSE_MOVE, this.handler);
     91             this.area = null;
     92             visible = false;
     93         }
     94         
     95         public function move(point:Point):void {             
     96             var lp:Point = this.parent.globalToLocal(point);
     97             this.x = lp.x - 6;            
     98             this.y = lp.y - label.height - 12;
     99             if(!visible){
    100                 visible = true;
    101             }
    102         }
    103         
    104         private function handler(event:MouseEvent):void    {
    105             switch(event.type) {
    106                 case MouseEvent.MOUSE_OUT:
    107                     this.hide();
    108                     break;
    109                 case MouseEvent.MOUSE_MOVE:
    110                     this.move(new Point(event.stageX, event.stageY));                    
    111                     break;
    112                 case MouseEvent.MOUSE_OVER:
    113                     this.show(event.currentTarget as DisplayObject);
    114                     this.move(new Point(event.stageX, event.stageY))
    115                     break;
    116             }
    117         }
    118         
    119     }
    120 }


    时间轴代码

     1 import CYPL.Graphics.*;
     2 /**==========================15个参数==================================================================================
     3 *@param:x0>圆心x坐标=========1
     4 *@param:y0>圆心y坐标=========2
     5 *@param:a>长轴===============3
     6 *@param:b>短轴================4
     7 *@param:h>厚度=================5
     8 *@alpha:Number>透明度===============6
     9 *@param:dataList>数据列表(有默认值)===============7
    10 *@param:dataList>颜色列表(有默认值)==================8
    11 *@param:dataList>名称列表(有默认值)==================9
    12 *@param:dataList>是否显示百分比==================10
    13 *@param:dataList>百分比字体颜色==================11
    14 *@param:dataList>是否显示图例==================12
    15 *@param:dataList>图例x坐标==================13
    16 *@param:dataList>图例y坐标==================14
    17 *@param:dataList>图例间距==================15
    18 */
    19 var dataList:Array = [100,100,100,100,100,100];
    20 //var dataList:Array = [0,0,100,200,100,300,100,0,0];
    21 for (var i:int=0; i<6; i++) {
    22 
    23     this["txt" + i].restrict = "0-9";
    24 
    25 
    26 }
    27 var nameList:Array = ["星光大道","春节晚会","同一首歌","梦想剧场","NBA 赛场","非常“6+1”"];
    28 //trace(dataList+"..list");
    29 var pie:DrawPieGraph = new DrawPieGraph(200,240,120,80,40,1,dataList,null,nameList,true,0xffffff,true,440,240,10);
    30 addChild(pie);
    31 btn.addEventListener(MouseEvent.CLICK,fun);
    32 btn.setStyle("textFormat",new TextFormat("宋体",14,0xffffff));
    33 function fun(e):void {
    34     for (var i:int=0; i<6; i++) {
    35         dataList[i] = Number(this["txt" + i].text);
    36     }
    37     //pie.clearAll()
    38     pie.render(dataList);
    39 }
  • 相关阅读:
    深入理解网卡配置bond的意义和作用
    关于B站UP主墨茶official逝世的感想
    Python内置函数学习笔记
    Python学习笔记(4)
    测试工作中不可忽略的点
    Python学习笔记(3)
    Python学习笔记(2)
    Python学习笔记(1)
    docker-compose部署
    Xtrabackup源码安装
  • 原文地址:https://www.cnblogs.com/ddw1997/p/1530597.html
Copyright © 2011-2022 走看看