`

as3绘制饼状图

 
阅读更多

来自:http://www.cnblogs.com/ddw1997/archive/2009/07/24/1530597.html

 

DrawPieGraph.as

1package CYPL.Graphics{
   import fl.transitions.Tween;
   import fl.transitions.easing.*;
   import fl.transitions.TweenEvent;
   import flash.display.MovieClip;
   import flash.display.Sprite;
   import flash.display.Shape;
   import flash.display.Graphics;
   import flash.events.MouseEvent;
   import flash.text.*;
   public class DrawPieGraph extends MovieClip {
 13        //存放shape对象
       private var __contain:Object;
       //设置角度从-90开始
       private var R:int = -90;
       private var D:uint = 30;
       private var _shape:Shape;
       //初始饼图的圆心位置
       private var _x0:Number;
       private var _y0:Number;
       //椭圆饼图的长轴与短轴长度
       private var _a:Number;
       private var _b:Number;
       //饼图的厚度
       private var _h:Number;
       //透明度
       private var _alpha:Number;
       //数据列表
       private var _nameList:Array;
       private var _dataList:Array;
       private var _colorList:Array;
       private var _angleList:Array;
       private var _depthList:Array;
       //
       private var _tween1:Tween;
       private var _tween2:Tween;
       private var showorder:Boolean;
       private var percent:Boolean;
       private var fontcolor:uint;
       private var orderx:Number;
       private var ordery:Number;
       private var orderxy:Number;
       private var shape:Array;
       private var sp:Sprite;
       private var Rect:Sprite;
       private var namelabel:TextField;
 49
       /**//**==========================15个参数==================================================================================
       *@param:x0>圆心x坐标=========1
       *@param:y0>圆心y坐标=========2
       *@param:a>长轴===============3
       *@param:b>短轴================4
       *@param:h>厚度=================5
       *@alpha:Number>透明度===============6
       *@param:dataList>数据列表(有默认值)===============7
       *@param:dataList>颜色列表(有默认值)==================8
       *@param:dataList>名称列表(有默认值)==================9
       *@param:dataList>是否显示百分比==================10
       *@param:dataList>百分比字体颜色==================11
       *@param:dataList>是否显示图例==================12
       *@param:dataList>图例x坐标==================13
       *@param:dataList>图例y坐标==================14
       *@param:dataList>图例间距==================15
       */
       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) {
           _x0 = x0;
           _y0 = y0;
           _a = a;
           _b = b;
           _h = h;
           percent = ifpercent;
           fontcolor = perColor;
           showorder = ifshoworder;
           orderx = myorderx;
           ordery = myordery;
           orderxy = myorderxy;
           _nameList = nameList;
           _alpha = Alpha;
           _colorList = colorList == null ? [0x330099,0x04D215,0x7E9B06,0x990065,0xFF9E01,0xFF6600,0xFE9A9A,0xA00101,0xFCD202]:colorList;
           sp=new Sprite();
           sp.mouseEnabled = sp.mouseChildren = false;
           ToolTip.init(sp);
           render(dataList);
       }
       public function render(dataList:Array ) {
           
           R = -90;
           setAngleList(dataList);
           clearAll();
           drawRect();
           drawPie();
       }
 96        private function setAngleList(dataList:Array):void {
           _dataList = dataList == null ? [1,1,1,1,1,1,1,1]:dataList;
           _angleList = [];
           var totalData:int;
           var len:uint = _dataList.length;
           for (var j:uint=0; j < len; j++) {
               totalData += _dataList[j];
           }
           if (totalData==0) {
               for (j=0; j < len; j++) {
                   _dataList[j]=1;
                   totalData=len;
               }
           }
111            for (j=0; j < len; j++) {
               if (j==len-1) {
                   _angleList.push([R,270]);
               } else {
                   var r:uint=Math.floor(_dataList[j]/totalData*360);
                   var posR:int=R+r;
                   _angleList.push([R,posR]);
                   R=posR;
               }
           }
           for (j=len-1; j >0; j--) {
               
               if(_dataList[j]!=0){
                   _angleList.splice(j, 1,[_angleList[j][0],270]);
                   break;
                   }
               
               
           }
131        }
       private function setDepths():void {
           _depthList=[];
           var len:uint=_angleList.length;
           for (var j:uint=0; j < len; j++) {
               var minJ:Number=_angleList[j][0];
               var maxJ:Number=_angleList[j][1];
               switch (true) {
                   case minJ >= -90 && minJ <= 90 && maxJ<=90 :
                       _depthList[j]=minJ;
                       break;
                   default :
                       _depthList[j]=1000-minJ;
               }
           }
           _depthList=_depthList.sort(Array.NUMERIC|Array.RETURNINDEXEDARRAY);
           for (j=0; j<len; j++) {
               if (this.contains(__contain["shape"+_depthList[j]])) {
                   setChildIndex(__contain["shape"+_depthList[j]],j);
               }
           }
       }
       private function drawRect():void {
           if (showorder) {
               for (var jk:uint=0; jk < _angleList.length; jk++) {
                   Rect=new Sprite  ;//图例方块
                   addChild(Rect);
                   Rect.name="abcde"+jk;
                   if (_dataList[jk]!=0) {
                       Rect.buttonMode=true;
                   }
                   namelabel=new TextField  ;//图例的文字说明,它和方块同为pie的子级
                   //namelabel.text=_nameList[jk];
                   namelabel.selectable=false;
                   namelabel.autoSize=TextFieldAutoSize.LEFT;
                   namelabel.htmlText="<font size='16' color='#ffffff' face='黑体' >"+_nameList[jk]+"</font>";
                   //下划线效果namelabel.htmlText= "<font size='16' color='#ffffff' face='黑体' >"+"<u>"+_nameList[jk]+"</u>"+"</font>";
                   addChild(namelabel);
                   var beginx:Number=orderx;
                   var beginy:Number=ordery;
                   var jianxy:Number=orderxy+12;//图例方块的边长
                   if (_dataList[jk]!=0) {
                       Rect.graphics.beginFill(_colorList[jk],1);
                   }
                   Rect.graphics.lineStyle(1,0xffffff,1);
                   Rect.graphics.moveTo(0,0);
                   Rect.graphics.lineTo(12,0);
                   Rect.graphics.lineTo(12,12);
                   Rect.graphics.lineTo(0,12);
                   Rect.graphics.lineTo(0,0);
                   if (_dataList[jk]!=0) {
                       Rect.graphics.endFill();
                   }
                   Rect.x=beginx;
                   Rect.y=beginy+jianxy*jk;
                   namelabel.x=Rect.x+20;
                   namelabel.y=Rect.y-4;
                   _dataList[jk]!=0?Rect.addEventListener(MouseEvent.MOUSE_OVER,onMouseDownX):0;
               }
           }
192
       }
       public function drawPie():void {
           __contain={};
           var len:uint=_angleList.length;
           var step:uint=1;
199            shape=new Array();
           for (var j:uint=0; j < len; j++) {
202                __contain["shape"+j]=new MovieClip  ;
               addChild(__contain["shape"+j]);
               shape.push(__contain["shape" + j]);
               if (_dataList[j]!=0) {
207                    __contain["shape"+j].out=false;
                   //设置中心角,方便以下进行中点移动
                   __contain["shape"+j].r=(_angleList[j][0]+_angleList[j][1])/2;
                   __contain["shape"+j].addEventListener(MouseEvent.MOUSE_DOWN,onMouseDownX);
212                    ToolTip.register(__contain["shape"+j], _nameList[j]);
                   __contain["shape"+j].name="shape"+j;
                   var drakColor:uint=getDarkColor(_colorList[j]);//深色
                   var g:Graphics=__contain["shape"+j].graphics;
                   //====================================================================================================先画百分比
                   if (percent) {
                       /**//*g.beginFill(0x000000,_alpha);
                                   g.lineStyle(1, 0x000000, 1);
                                   if(0<(_angleList[j][0]+ _angleList[j][1])/2 &&(_angleList[j][0]+ _angleList[j][1])/2<180 ){
                                     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);
                                         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);
                                         }else{        
                                          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);
                                          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);
                                   }
                                   g.endFill()*/
                       var total:Number=0;
                       for (var jh:uint=0; jh <_dataList.length; jh++) {
                           total+=_dataList[jh];
                       }
                       var prelabel:TextField=new TextField  ;
                       prelabel.text=String(Math.floor((_dataList[j]/total)*10000)/100)+"%";
                       prelabel.selectable=false;
                       prelabel.background=true;
                       prelabel.backgroundColor=drakColor;
                       __contain["shape"+j].addChild(prelabel);
                       var myformat:TextFormat = new TextFormat();
                       myformat.font="Verdana";
                       myformat.size=12;
                       myformat.color=0xffffff;
                       prelabel.setTextFormat(myformat);
                       prelabel.gridFitType="pixel";
                       prelabel.antiAliasType="advanced";
                       prelabel.sharpness=-400;
                       prelabel.autoSize=TextFieldAutoSize.LEFT;
                       var zhongwei:Number=(_angleList[j][0] + _angleList[j][1] ) / 2;
                       if (zhongwei>0&&zhongwei<90) {
                           prelabel.x=getRPoint(_x0,_y0+_h,_a,_b,zhongwei).x;
                           prelabel.y=getRPoint(_x0,_y0+_h,_a,_b,zhongwei).y;
                       } else if (zhongwei>90 && zhongwei<180) {
                           prelabel.x=getRPoint(_x0,_y0+_h,_a,_b,zhongwei).x-prelabel.width;
                           prelabel.y=getRPoint(_x0,_y0+_h,_a,_b,zhongwei).y;
                       } else if (zhongwei>180 && zhongwei<270) {
                           prelabel.x=getRPoint(_x0,_y0,_a,_b,zhongwei).x-prelabel.width;
                           prelabel.y=getRPoint(_x0,_y0,_a,_b,zhongwei).y-prelabel.height;
                       } else if (zhongwei>-90 && zhongwei<0) {
                           prelabel.x=getRPoint(_x0,_y0,_a,_b,zhongwei).x;
                           prelabel.y=getRPoint(_x0,_y0,_a,_b,zhongwei).y-prelabel.height;
                       } else if (zhongwei == 0) {
                           prelabel.x=getRPoint(_x0,_y0,_a,_b,zhongwei).x;
                           prelabel.y=getRPoint(_x0,_y0,_a,_b,zhongwei).y-prelabel.height/2;
                       } else if (zhongwei == 90) {
                           prelabel.x=getRPoint(_x0,_y0+_h,_a,_b,zhongwei).x-prelabel.width/2;
                           prelabel.y=getRPoint(_x0,_y0+_h+1,_a,_b,zhongwei).y;
                       } else if (zhongwei == 180) {
                           prelabel.x=getRPoint(_x0,_y0,_a,_b,zhongwei).x-prelabel.width;
                           prelabel.y=getRPoint(_x0,_y0,_a,_b,zhongwei).y-prelabel.height/2;
                       }
                   }
                   //-------------------------------------- //内弧
                   //g.lineStyle(1);
                   //先画底
                   //内弧
                   g.lineStyle(1,drakColor,_alpha);
                   g.beginFill(_colorList[j],_alpha);
                   g.moveTo(_x0,_y0+_h);
                   var r:Number=_angleList[j][0];
                   var minR:Number=r;
                   var maxR:int=_angleList[j][1];
                   while (r + step < maxR) {
                       g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,r).x,getRPoint(_x0,_y0 + _h,_a,_b,r).y);
                       r+=step;
                   }
                   g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,maxR).x,getRPoint(_x0,_y0 + _h,_a,_b,maxR).y);
                   g.endFill();
                   //画内侧面
                   g.lineStyle(1,drakColor,_alpha);
                   g.beginFill(drakColor,_alpha);
                   g.moveTo(_x0,_y0+_h);
                   g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,minR).x,getRPoint(_x0,_y0 + _h,_a,_b,minR).y);
                   g.lineTo(getRPoint(_x0,_y0,_a,_b,minR).x,getRPoint(_x0,_y0,_a,_b,minR).y);
                   g.lineTo(_x0,_y0);
                   g.endFill();
                   //画外侧面
                   g.lineStyle(1,drakColor,1);
                   g.beginFill(drakColor,_alpha);
                   g.moveTo(_x0,_y0+_h);
                   g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,maxR).x,getRPoint(_x0,_y0 + _h,_a,_b,maxR).y);
                   g.lineTo(getRPoint(_x0,_y0,_a,_b,maxR).x,getRPoint(_x0,_y0,_a,_b,maxR).y);
                   g.lineTo(_x0,_y0);
                   g.endFill();
                   //画外弧侧面
                   //画外弧侧面
                   //--------------------------------
                   //下边高
                   //下边外侧边高
                   if (minR<=0&&maxR>=0&&maxR<=180) {
                       //解决90度时外侧面,显示事实为90度,实际为0度,因为我们整个旋转了-90度;
                       g.lineStyle(1,drakColor,1);
                       g.beginFill(drakColor,1);
                       g.moveTo(getRPoint(_x0,_y0 + _h,_a,_b,minR).x,getRPoint(_x0,_y0 + _h,_a,_b,minR).y);
                       var k:Number=minR;
                       while (k < 0) {
                           k+=step;
                           g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,k).x,getRPoint(_x0,_y0 + _h,_a,_b,k).y);
                       }
                       g.lineTo(getRPoint(_x0,_y0,_a,_b,0).x,getRPoint(_x0,_y0,_a,_b,0).y);
                       while (k > minR) {
                           k-=step;
                           g.lineTo(getRPoint(_x0,_y0,_a,_b,k).x,getRPoint(_x0,_y0,_a,_b,k).y);
                       }
                       g.endFill();
                       g.lineStyle(1,drakColor,1);
                       g.beginFill(drakColor,1);
                       g.moveTo(getRPoint(_x0,_y0 + _h,_a,_b,0).x,getRPoint(_x0,_y0 + _h,_a,_b,0).y);
                       k=0;
                       while (k < maxR) {
                           k+=step;
                           g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,k).x,getRPoint(_x0,_y0 + _h,_a,_b,k).y);
                       }
                       g.lineTo(getRPoint(_x0,_y0,_a,_b,maxR).x,getRPoint(_x0,_y0,_a,_b,maxR).y);
                       while (k > 0) {
                           k-=step;
                           g.lineTo(getRPoint(_x0,_y0,_a,_b,k).x,getRPoint(_x0,_y0,_a,_b,k).y);
                       }
                       g.endFill();
                   } else if (maxR >= 180 && minR <= 180 && minR >= 0) {
                       //解决180度时外侧面,显示事实为270度,实际为180度,因为我们整个旋转了-90度;
                       g.lineStyle(1,drakColor,1);
                       g.beginFill(drakColor,1);
                       g.moveTo(getRPoint(_x0,_y0 + _h,_a,_b,minR).x,getRPoint(_x0,_y0 + _h,_a,_b,minR).y);
                       k=minR;
                       while (k < 180) {
                           k+=step;
                           g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,k).x,getRPoint(_x0,_y0 + _h,_a,_b,k).y);
                       }
                       g.lineTo(getRPoint(_x0,_y0,_a,_b,180).x,getRPoint(_x0,_y0,_a,_b,180).y);
                       while (k > minR) {
                           k-=step;
                           g.lineTo(getRPoint(_x0,_y0,_a,_b,k).x,getRPoint(_x0,_y0,_a,_b,k).y);
                       }
                       g.endFill();
                       g.lineStyle(1,drakColor,1);
                       g.beginFill(drakColor,1);
                       g.moveTo(getRPoint(_x0,_y0 + _h,_a,_b,180).x,getRPoint(_x0,_y0 + _h,_a,_b,180).y);
                       k=180;
                       while (k < maxR) {
                           k+=step;
                           g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,k).x,getRPoint(_x0,_y0 + _h,_a,_b,k).y);
                       }
                       g.lineTo(getRPoint(_x0,_y0,_a,_b,maxR).x,getRPoint(_x0,_y0,_a,_b,maxR).y);
                       while (k > 180) {
                           k-=step;
                           g.lineTo(getRPoint(_x0,_y0,_a,_b,k).x,getRPoint(_x0,_y0,_a,_b,k).y);
                       }
                       g.endFill();
                   } else if (minR <= 0 && maxR >= 180) {
                       //解决同时处于0度和180度的情况
                       g.lineStyle(1,drakColor,1);
                       g.beginFill(drakColor,1);
                       g.moveTo(getRPoint(_x0,_y0 + _h,_a,_b,minR).x,getRPoint(_x0,_y0 + _h,_a,_b,minR).y);
                       k=minR;
                       while (k < 0) {
                           k+=step;
                           g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,k).x,getRPoint(_x0,_y0 + _h,_a,_b,k).y);
                       }
                       g.lineTo(getRPoint(_x0,_y0,_a,_b,0).x,getRPoint(_x0,_y0,_a,_b,0).y);
                       while (k > minR) {
                           k-=step;
                           g.lineTo(getRPoint(_x0,_y0,_a,_b,k).x,getRPoint(_x0,_y0,_a,_b,k).y);
                       }
                       g.endFill();
                       g.lineStyle(1,drakColor,1);
                       g.beginFill(drakColor,1);
                       g.moveTo(getRPoint(_x0,_y0 + _h,_a,_b,0).x,getRPoint(_x0,_y0 + _h,_a,_b,0).y);
                       k=0;
                       while (k < 180) {
                           k+=step;
                           g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,k).x,getRPoint(_x0,_y0 + _h,_a,_b,k).y);
                       }
                       g.lineTo(getRPoint(_x0,_y0,_a,_b,180).x,getRPoint(_x0,_y0,_a,_b,180).y);
                       while (k > 0) {
                           k-=step;
                           g.lineTo(getRPoint(_x0,_y0,_a,_b,k).x,getRPoint(_x0,_y0,_a,_b,k).y);
                       }
                       g.endFill();
                       g.lineStyle(1,drakColor,1);
                       g.beginFill(drakColor,1);
                       g.moveTo(getRPoint(_x0,_y0 + _h,_a,_b,180).x,getRPoint(_x0,_y0 + _h,_a,_b,180).y);
                       k=180;
                       while (k < maxR) {
                           k+=step;
                           g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,k).x,getRPoint(_x0,_y0 + _h,_a,_b,k).y);
                       }
                       g.lineTo(getRPoint(_x0,_y0,_a,_b,maxR).x,getRPoint(_x0,_y0,_a,_b,maxR).y);
                       while (k > 180) {
                           k-=step;
                           g.lineTo(getRPoint(_x0,_y0,_a,_b,k).x,getRPoint(_x0,_y0,_a,_b,k).y);
                       }
                       g.endFill();
                   } else {
                       g.lineStyle(1,drakColor,1);
                       g.beginFill(drakColor,1);
                       g.moveTo(getRPoint(_x0,_y0 + _h,_a,_b,minR).x,getRPoint(_x0,_y0 + _h,_a,_b,minR).y);
                       k=minR;
                       while (k < maxR) {
                           k+=step;
                           g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,k).x,getRPoint(_x0,_y0 + _h,_a,_b,k).y);
                       }
                       //g.lineTo(getRPoint(_x0, _y0+_h, _a, _b, maxR).x, getRPoint(_x0, _y0+_h, _a, _b, maxR).y);
                       g.lineTo(getRPoint(_x0,_y0,_a,_b,k).x,getRPoint(_x0,_y0,_a,_b,k).y);
                       while (k > minR) {
                           k-=step;
                           g.lineTo(getRPoint(_x0,_y0,_a,_b,k).x,getRPoint(_x0,_y0,_a,_b,k).y);
                       }
                       g.endFill();
                   }
                   //画上表面
                   g.lineStyle(1,_colorList[j],_alpha);
                   g.beginFill(_colorList[j],_alpha);
                   g.moveTo(_x0,_y0);
                   r=minR;
                   while (r + step < maxR) {
                       g.lineTo(getRPoint(_x0,_y0,_a,_b,r).x,getRPoint(_x0,_y0,_a,_b,r).y);
                       r+=step;
                   }
                   g.lineTo(getRPoint(_x0,_y0,_a,_b,maxR).x,getRPoint(_x0,_y0,_a,_b,maxR).y);
                   g.endFill();
               }
           }
           setDepths();
           addChild(sp);//提示标签加在这里,防止标签被饼块遮住
       }
       private function onMouseDownX(e:MouseEvent):void {
           var TG:MovieClip=shape[Number(e.currentTarget.name.substring(5))] as MovieClip;
           var posX:Number=getRPoint(0,0,D,D,TG.r).x;
           var posY:Number=getRPoint(0,0,D,D,TG.r).y;
           if (! TG.out) {
               TG.removeEventListener(MouseEvent.MOUSE_DOWN,onMouseDownX);
               TG["tweenX"]=new Tween(TG,"x",Bounce.easeOut,0,posX,1.5,true);
               TG["tweenY"]=new Tween(TG,"y",Bounce.easeOut,0,posY,1.5,true);
           } else {
               TG.removeEventListener(MouseEvent.MOUSE_DOWN,onMouseDownX);
               TG["tweenX"]=new Tween(TG,"x",Bounce.easeOut,TG.x,0,1,true);
               TG["tweenY"]=new Tween(TG,"y",Bounce.easeOut,TG.y,0,1,true);
           }
           TG["tweenX"].addEventListener(TweenEvent.MOTION_FINISH,onMotionFinish);
       }
461        //===============================================================================
       private function onMotionFinish(e:TweenEvent):void {
           var TG:MovieClip=e.currentTarget.obj as MovieClip;
           TG["tweenX"].removeEventListener(TweenEvent.MOTION_FINISH,onMotionFinish);
           TG.out=! TG.out?true:false;
           TG.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDownX);
       }
       private function getDarkColor(color:uint):uint {
           var r:uint=color>>16&0xFF/1.3;//设置red通道的值
           var g:uint=color>>8&0xFF/1.3;//设置green通道的值
           var b:uint=color&0xFF/1.1;//设置blue通道的值
           return r << 16 | g << 8 | b;//得到新颜色
       }
       private function getRPoint(x0:Number,y0:Number,a:Number,b:Number,r:Number):Object {
           r=r*Math.PI/180;
           return {x:Math.cos(r) * a + x0,y:Math.sin(r) * b + y0};
       }
       public function get contain():Object {
           return __contain;
       }
       private function clearAll():void {//清除内容
       
           var len:uint=_dataList.length;
           while(this.numChildren!=0){
               removeChildAt(0);
               }
           for (var j:uint=0; j<len; j++) {
               
               if (__contain) {
                   __contain["shape"+j]=null;
               }
           }
           
           Rect=null;
        }
   }
}

 

ToolTip.as

package CYPL.Graphics
{
    
    import flash.accessibility.AccessibilityProperties;
    import flash.display.*;
    import flash.events.*;
    import flash.geom.Point;
    import flash.text.*;
    /**
     * @link kinglong@gmail.com
     * @author Kinglong
     * @version 0.1
     * @since 20090608
     * @playerversion fp9+
     * 热区提示
     */    
    public class ToolTip extends Sprite    {
        private static var instance:ToolTip = null;
        private var label:TextField;        
        private var area:DisplayObject;
        public function ToolTip() {
            label = new TextField();
            label.autoSize = TextFieldAutoSize.LEFT;
            label.selectable = false;
            label.multiline = false;
            label.wordWrap = false;
            label.defaultTextFormat = new TextFormat("宋体", 12, 0x666666);
            label.text = "提示信息";
            label.x = 5;
            label.y = 2;
            addChild(label);
            redraw();
            visible = false;
            mouseEnabled = mouseChildren = false;
        }
        
        private function redraw() {
            var w:Number = 10 + label.width;
            var h:Number = 4 + label.height;            
            this.graphics.clear();
            this.graphics.beginFill(0x000000, 0.4);
            this.graphics.drawRoundRect(3, 3, w, h, 5, 5);                
            this.graphics.moveTo(6, 3 + h);
            this.graphics.lineTo(12, 3 + h);
            this.graphics.lineTo(9, 8 + h);
            this.graphics.lineTo(6, 3 + h);
            this.graphics.endFill();
            this.graphics.beginFill(0xffffff);
            this.graphics.drawRoundRect(0, 0, w, h, 5, 5);
            this.graphics.moveTo(3, h);
            this.graphics.lineTo(9, h);
            this.graphics.lineTo(6, 5 + h);
            this.graphics.lineTo(3, h);
            this.graphics.endFill();
        }
        
        public static function init(base:DisplayObjectContainer) {
            if (instance == null) {
                instance = new ToolTip();
                base.addChild(instance);                
            }
        }
        
        public static function register(area:DisplayObject, message:String):void {
            if(instance != null){
                var prop:AccessibilityProperties = new AccessibilityProperties();
                prop.description = message;
                area.accessibilityProperties = prop;
                area.addEventListener(MouseEvent.MOUSE_OVER, instance.handler);
            }
        }
        
        public static function unregister(area:DisplayObject):void {
            if (instance != null) {
                area.removeEventListener(MouseEvent.MOUSE_OVER, instance.handler);
            }
        }
        
        public function show(area:DisplayObject):void {
            this.area = area;
            this.area.addEventListener(MouseEvent.MOUSE_OUT, this.handler);
            this.area.addEventListener(MouseEvent.MOUSE_MOVE, this.handler);
            label.text = area.accessibilityProperties.description;
            redraw();            
        }

        
        public function hide():void    {
            this.area.removeEventListener(MouseEvent.MOUSE_OUT, this.handler);
            this.area.removeEventListener(MouseEvent.MOUSE_MOVE, this.handler);
            this.area = null;
            visible = false;
        }
        
        public function move(point:Point):void {             
            var lp:Point = this.parent.globalToLocal(point);
            this.x = lp.x - 6;            
            this.y = lp.y - label.height - 12;
            if(!visible){
                visible = true;
            }
        }
        
        private function handler(event:MouseEvent):void    {
            switch(event.type) {
                case MouseEvent.MOUSE_OUT:
                    this.hide();
                    break;
                case MouseEvent.MOUSE_MOVE:
                    this.move(new Point(event.stageX, event.stageY));                    
                    break;
                case MouseEvent.MOUSE_OVER:
                    this.show(event.currentTarget as DisplayObject);
                    this.move(new Point(event.stageX, event.stageY))
                    break;
            }
        }
        
    }
}

 

时间轴代码

import CYPL.Graphics.*;
/**==========================15个参数==================================================================================
*@param:x0>圆心x坐标=========1
*@param:y0>圆心y坐标=========2
*@param:a>长轴===============3
*@param:b>短轴================4
*@param:h>厚度=================5
*@alpha:Number>透明度===============6
*@param:dataList>数据列表(有默认值)===============7
*@param:dataList>颜色列表(有默认值)==================8
*@param:dataList>名称列表(有默认值)==================9
*@param:dataList>是否显示百分比==================10
*@param:dataList>百分比字体颜色==================11
*@param:dataList>是否显示图例==================12
*@param:dataList>图例x坐标==================13
*@param:dataList>图例y坐标==================14
*@param:dataList>图例间距==================15
*/
var dataList:Array = [100,100,100,100,100,100];
//var dataList:Array = [0,0,100,200,100,300,100,0,0];
for (var i:int=0; i<6; i++) {

    this["txt" + i].restrict = "0-9";


}
var nameList:Array = ["星光大道","春节晚会","同一首歌","梦想剧场","NBA 赛场","非常“6+1”"];
//trace(dataList+"..list");
var pie:DrawPieGraph = new DrawPieGraph(200,240,120,80,40,1,dataList,null,nameList,true,0xffffff,true,440,240,10);
addChild(pie);
btn.addEventListener(MouseEvent.CLICK,fun);
btn.setStyle("textFormat",new TextFormat("宋体",14,0xffffff));
function fun(e):void {
    for (var i:int=0; i<6; i++) {
        dataList[i] = Number(this["txt" + i].text);
    }
    //pie.clearAll()
    pie.render(dataList);
}

 

分享到:
评论

相关推荐

    flash as3.0 3D动态饼状图调用XML

    总的来说,Flash AS3.0制作3D动态饼状图调用XML数据是一项综合性的任务,涉及了ActionScript编程、图形绘制、3D转换、XML解析和交互设计等多个方面。通过熟练掌握这些技术,你可以创建出富有表现力的数据可视化工具...

    VB2010绘制饼状图

    在VB2010中,绘制饼状图是一项常见的数据可视化任务,这有助于将复杂的数据以直观的方式呈现出来。饼状图通过不同大小的扇形区域来表示数据的比例关系,适用于展示各部分占整体的比例。以下是一些关于如何在VB2010中...

    react-利用d3js绘制漂亮的React3D饼状图

    下面我们将详细探讨如何在React项目中利用D3.js绘制3D饼状图。 首先,我们需要安装D3.js库。在终端中运行以下命令: ```bash npm install d3 ``` 接着,我们还需要一个3D饼状图的插件,如`d3-pie3d`。你可以通过...

    Flash饼状图工具

    3. `index.jpg`:这可能是一个截图或者示例图片,展示了Flash饼状图工具生成的饼状图效果,帮助用户预览最终结果。 4. `licence.txt`:此文件包含了软件的许可协议,详细规定了用户可以如何使用、分发和修改该工具...

    [Matplotlib科学绘图系列]使用Matplotlib绘制饼状图

    [Matplotlib科学绘图系列]使用Matplotlib绘制饼状图 导入必要的库:我们需要导入matplotlib.pyplot库,以便进行数据可视化的工作。这个库非常常用,并且对于数据可视化有很强大的支持。我们将这个库简写为plt,以...

    简单的饼状图

    在Python中,我们可以通过各种库来绘制饼状图,如Matplotlib、Seaborn和Plotly等。例如,使用Matplotlib创建饼状图的基本代码如下: ```python import matplotlib.pyplot as plt # 示例数据 labels = ['部分A', '...

    读取excel文件内容 饼状图 柱状图 折线图

    本教程将详细介绍如何使用编程语言(如Python)来读取Excel文件,并利用这些数据生成饼状图、柱状图和折线图,这些都是数据展示的常用图表类型。 首先,我们需要引入Python中的`pandas`库来读取Excel文件。`pandas`...

    用chart进行绘制饼状图

    3. **绘制饼状图**: 使用`plt.pie()`函数创建饼状图,将类别值作为参数传入。还可以通过其他参数调整图的样式,如颜色、标签距离、是否显示百分比等。 ```python plt.pie(values, labels=labels, autopct='%1.1f%...

    java线形图柱形图饼状图

    在Java编程中,创建线形图、柱形图和饼状图是数据分析和可视化的重要部分。这些图表可以帮助我们直观地理解复杂的数据集,使数据更易于解析和解释。以下将详细探讨如何在Java环境中实现这些图形,特别是针对...

    Python使用matplotlib的pie函数绘制饼状图功能示例

    在Python的可视化库matplotlib中,`pie()`函数是用来绘制饼状图的重要工具。饼状图是一种数据表示方式,常用于展示各个部分占总体的比例。在本篇内容中,我们将深入探讨如何使用`matplotlib.pyplot.pie()`函数来创建...

    有用的flash竖柱形图、横柱形图、条(线)形图、饼状图演示程序

    本示例程序聚焦于四种常见的图表类型:竖柱形图、横柱形图、条形图(线形图)以及饼状图,全部基于Flash技术实现。以下是关于这些图表类型及其在Flash中的应用的详细解释。 1. **竖柱形图**:竖柱形图是一种常见的...

    图形统计flash饼状图

    在Flash中创建饼状图,可以利用ActionScript(AS)进行编程,AS是Flash开发的主要脚本语言,它基于ECMAScript,具有强大的交互性和动态性。 Flash饼状图的设计通常包括以下几个关键部分: 1. **数据源**:饼状图的...

    python绘图代码饼状图

    要绘制饼状图,首先需要导入Matplotlib库,并使用其pyplot模块提供的pie()函数。用户可以传递一个列表或数组作为饼状图的数据源,以及一个labels列表来为每个扇区指定标签。 以下是一个简单的Python代码示例,演示...

    饼状图模板+XML+FLASH

    在实现过程中,开发者可能使用了AS3(ActionScript 3)——Flash的编程语言,编写了处理XML数据和绘制饼状图的代码。ActionScript 3提供了XML类库,可以方便地加载、解析和操作XML文档。通过ActionScript,开发者...

    饼状比例图

    例如,在Python中,我们有matplotlib、seaborn和plotly等库可以方便地绘制饼状图。以下是一个使用matplotlib的例子: ```python import matplotlib.pyplot as plt # 假设我们有以下数据 data = [30, 25, 20, 15, ...

    Flash饼状图工具.rar

    1. **设计AS3类**:首先在Flash环境中创建一个新的ActionScript项目,定义一个饼状图类,包括初始化、接收数据、计算角度和绘制扇形等方法。 2. **发布SWF文件**:编写完AS3代码后,编译生成SWF文件,这将是...

    Python matplotlib绘制饼状图功能示例

    本文实例讲述了Python matplotlib绘制饼状图功能。分享给大家供大家参考,具体如下: 一 代码 import numpy as np import matplotlib.pyplot as plt #The slices will be ordered and plotted counter-clockwise. ...

    利用VB画饼状比例图

    3. 绘制圆心和半径:确定圆心的位置(通常在PictureBox中心),并设置合适的半径,使得饼状图不超出PictureBox的边界。 4. 绘制扇形:使用DrawArc方法绘制每个扇形。该方法接受起始角度、结束角度、圆心坐标和半径等...

    Python饼状图的绘制实例

    3. 使用`plt.pie()`函数绘制饼状图,并设置相关参数。 4. 调用`plt.show()`显示图形。 这个实例提供了一个基本的饼状图绘制方法,实际上matplotlib库还允许对颜色、边框、文本样式等进行更复杂的自定义,以满足不同...

Global site tag (gtag.js) - Google Analytics