动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 图形图象 > Flash教程
图形图象:Photoshop,Fireworks,CorelDraw,Flash,3Dmax,AutoCad,Maya,Director,Authorware,Illustrator,相关软件
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Flash教程 ]的信息

本月文章推荐
.用Flash MX软件制作遥控小汽车.
.使用Flash引导线制作雪花飘飘动画.
.Flash动态柱状图表制作原理剖析.
.关于 JavaScript 和 Flash 间的通.
.FLASH所支持的HTML标记.
.创建一个Flash站点的十大技巧.
.Flash中作毛笔写字动画效果.
.Flash AS制作盛开的花朵视觉特效.
.用Flash制作简单的缓冲菜单的教程.
.Flash最常用AS语法及语句总结.
.Flash电子杂志常用滚动区域控制代.
.用Flash AS代码制作按钮弹出窗口.
.Flash动态缓冲图片导航制作详解.
.Flash实例教程:卡通MM眨眼睛动画.
.xml辅助flash电子地图标注地名.
.Flash Web结构之数据显示层.
.Flash与后台编码兼容性问题的解决.
.丰富多彩 有声有色的Flash互动动.
.小技巧测试Flash中AS代码的执行速.
.Flash电子书鼠标拖拽翻页效果原理.

用Flash AS3制作统计饼图动画效果

发表日期:2007-8-21 |


代码如下: /**
* @class:DrawPieGraph(画饼状图)
* @author:ycccc8202
* @date:2007.8.16
* @example:
* import com.ycccc.Graphics.*;
* var dataList:Array=[10,10,10,100,10,10,10,100];
* var pie:DrawPieGraph=new DrawPieGraph(200,200,150,90,15,dataList,[0xFF0F00,0xFF6600,0xFF9E01,0xFCD202,0xF8FF01,0xB0DE09,0x04D215,0x0D8ECF],.7);
* addChild(sprite);
*/
package com.ycccc.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;
public class DrawPieGraph extends MovieClip {
  
  //存放shape对象
  private var __contain:Object;
  //设置角度从-90开始
  private var R:int=-90;
  private var D:uint=20;
  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 _dataList:Array;
  private var _colorList:Array;
  private var _angleList:Array;
  private var _depthList:Array;
  //
  /**
  *@param:x0......>圆心x坐标
  *@param:y0......>圆心y坐标
  *@param:a......>长轴
  *@param:b......>短轴
  *@param:h......>厚度
  *@param:dataList......>数据列表
  *@param:dataList......>颜色列表
  *@alpha:Number......>透明度,默认为1.0
  */
  public function DrawPieGraph(x0:Number,y0:Number,a:Number,b:Number,h:Number,
dataList:Array,colorList:Array,alpha:Number=1.0) {
   _x0=x0;
   _y0=y0;
   _a=a;
   _b=b;
   _h=h;
   _alpha=alpha
   
   _dataList=dataList;
   _colorList=colorList;
   setAngleList();
   drawPie();
   setDepths();
  }
  private function setAngleList():void {
   _angleList=[];
   var totalData:int;
   var len:uint=_dataList.length;
   for (var j:uint=0; j < len; j++) {
    totalData+= _dataList[j];
   }
   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;
     trace(r+"___r");
     trace(R);
    }
   }
   trace(_angleList + ":::");
  }
  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;
    }
   }//end for
   trace(_depthList + "::::_depthList");
   _depthList=_depthList.sort(Array.NUMERIC | Array.RETURNINDEXEDARRAY);
   trace(_depthList);
   for (j=0; j<len; j++) {
    setChildIndex(__contain["shape"+_depthList[j]],j);
   }
  }
  private function drawPie():void {
   __contain={};
   var len:uint=_angleList.length;
   var step:uint=1;
   for (var j:uint=0; j < len; j++) {
    __contain["shape"+j]=new MovieClip;
    //设置中心角,方便以下进行点中移动
    __contain["shape"+j].r=(_angleList[j][0]+_angleList[j][1])/2;
    __contain["shape" + j].addEventListener(MouseEvent.MOUSE_DOWN,onMouseDownX);
    addChild(__contain["shape"+j]);
    var drakColor:uint=getDarkColor(_colorList[j]);//深色
    var g:Graphics=__contain["shape"+j].graphics;
    //g.lineStyle(1);
    //先画底
    //内弧
    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.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.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();
    //画外弧侧面
    g.beginFill(drakColor,_alpha);
    //g.lineStyle(1);
    g.moveTo(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);
    r=minR;
    while (r + step < maxR) {
     r+= step;
     g.lineTo(getRPoint(_x0,_y0,_a,_b,r).x,getRPoint(_x0,_y0,_a,_b,r).y);
    }
    g.lineTo(getRPoint(_x0,_y0,_a,_b,maxR).x,getRPoint(_x0,_y0,_a,_b,maxR).y);
    g.lineTo(getRPoint(_x0,_y0 + _h,_a,_b,maxR).x,getRPoint(_x0,_y0 + _h,_a,_b,maxR).y);
    while (r - step > minR) {
     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,minR).x,getRPoint(_x0,_y0 + _h,_a,_b,minR).y);
    g.endFill();
    //画上表面
    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();
   }
  }
  private function onMouseDownX(e:MouseEvent):void {
   var TG:MovieClip=e.target as MovieClip;
   var posX:int=getRPoint(0,0,D,D,TG.r).x;
   var posY:int=getRPoint(0,0,D,D,TG.r).y;
   if (TG.x==0 || TG.y==0) {
    TG.removeEventListener(MouseEvent.MOUSE_DOWN,onMouseDownX);
    var tween1=new Tween(TG,"x",Bounce.easeOut,0,posX,1,true);
    var tween2=new Tween(TG,"y",Bounce.easeOut,0,posY,1,true);
    tween1.addEventListener(TweenEvent.MOTION_FINISH,onMotionFinish);
   } else {
    TG.removeEventListener(MouseEvent.MOUSE_DOWN,onMouseDownX);
    var tween3=new Tween(TG,"x",Bounce.easeOut,TG.x,0,1,true);
    var tween4=new Tween(TG,"y",Bounce.easeOut,TG.y,0,1,true);
    tween3.addEventListener(TweenEvent.MOTION_FINISH,onMotionFinish);
   }
  }
  private function onMotionFinish(e:TweenEvent):void {
   var TG:MovieClip=e.currentTarget.obj as MovieClip;
   TG.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDownX);
  }
  private function getDarkColor(color:uint):uint {
   var r:uint=color >> 16 & 0xFF / 1.3;
   var g:uint=color >> 8 & 0xFF / 1.3;
   var b:uint=color & 0xFF /1.1;
   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;
  }
}
}

上一篇:Flash中作毛笔写字动画效果 人气:8552
下一篇:Flash支持新视频压缩标准 实现高清化 人气:2500
浏览全部Flash AS3的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-8-21 Nucleus v3.33 多国语言版
2008-8-21 HDWiki v4.0 bulid 080821 UTF-8
2008-8-21 明科在线客服系统 v6.0
2008-8-21 KesionCMS v5.0.2 正式版 utf-8
2008-8-21 KesionEshop v5.0.2 正式版 utf-8
2008-8-21 HDWiki v4.0 bulid 080821 GBK
2008-8-21 新文互动酷站展示系统 v1.5
2008-8-21 Punbb v1.2.20 多国语言版
2008-8-21 QQ头像网 beta
2008-8-16 iLaba Player(小喇叭播放器) v2.
2008-8-16 DoubleClickFix 鼠标双击修正工具
2008-8-16 CrystalCPUID 4.15.2.451
2008-8-16 VeryCD 电驴(easyMule) 1.0.4 Bu
2008-8-16 uTorrent 1.8 Build 11813 - Sta
2008-8-16 比特精灵(BitSpirit) v3.3.2.287
2008-8-16 StayInTune音叉 v1.0 破解版
2008-8-16 iChing《周易》汉化补丁 v1.0
2008-8-16 Starmap星空图v1.0汉化破解版
  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵