as3.0 曲线图 超简单代码

近来在做报表的东西,看了网上的开源的东西,感觉好长的代码好复杂的逻辑,所以干脆自己写了一个。欢迎大家来找碴。

package xoyo.chart
{
 import flash.display.Shape;
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.events.MouseEvent;
 import flash.geom.Point;
 
 import xoyo.compment.ToolTips;
 
 public class waveChart extends Sprite
 {
  private var coordinate:Shape;
  public var xlengh:Number;
  public var ylengh:Number;
  public var pitch:Number;
  private var circleshape:Sprite;
  private var container:Sprite;
  private var _data:Array;
  private var _tool:ToolTips;
  public function waveChart(xl:Number,yl:Number,_pitch:Number,data:Array)
  {
   _data=data;
   xlengh=xl;
   ylengh=yl;
   pitch=_pitch;
   coordinate=new Shape();
   this.addChild(coordinate);
   container=new Sprite;
   container.x=2;
   container.y=-2;
   this.addChild(container);
   drawline();
   container.addChild(drawgrid());
   circleshape=drawcicle();
   circleshape.addEventListener(MouseEvent.MOUSE_OVER,onOver);
   circleshape.addEventListener(MouseEvent.MOUSE_OUT,onOut);
   container.addChild(circleshape);
   _tool=new ToolTips();
   _tool.visible=false;
   container.addChild(_tool);
  }
  private function onOut(e:Event):void
  {
   _tool.visible=false;
  }
  private function onOver(e:Event):void
  {
   if(getareaNum()!=-1)
   {
    _tool.x=_data[getareaNum()].x;
    _tool.y=-_data[getareaNum()].y;
    _tool.setContent(_data[getareaNum()].url);
    _tool.visible=true;
   }
  }
  private function getareaNum():int
  {
   var _len:int=_data.length;
   var mousePoint:Point=new Point(this.mouseX,this.mouseY);
   while(_len--)
   {
    if(isInrect(mousePoint,new Point(_data[_len].x,-_data[_len].y)))
    {
     return _len;
    }
   }
   return _len;
  }
  private function isInrect(testPoint:Point,checkPoint:Point):Boolean
  {
   if(testPoint.x>checkPoint.x+8||testPoint.x<checkPoint.x-8||testPoint.y<checkPoint.y-8||testPoint.y>checkPoint.y+8)
   {
    return false;
   }
   return true;
  }
  private function drawcicle():Sprite
  {
   var c:Sprite=new Sprite();
   with(c.graphics)
   {
    beginFill(0xFF0000);
    //根据值去算坐标算法
    for (var i:int=0;i<_data.length;i++)
    {
     drawCircle(_data[i].x,-_data[i].y,5);
     drawCircle(_data[i].x,-_data[i].y,4);
     if(i+1<_data.length)
     {
      lineStyle(2,0xFF0000);
      if(_data[i+1].y>_data[i].y)
      {
       moveTo(_data[i].x+3,-_data[i].y-3);
       lineTo(_data[i+1].x-3,-_data[i+1].y+3);
      }else
      {
       moveTo(_data[i].x+3,-_data[i].y);
       lineTo(_data[i+1].x-3,-_data[i+1].y-3);
      }
     }
    }
    endFill();
   }
   return c;
  }
  private function drawgrid():Shape
  {
   var s:Shape=new Shape();
   with(s.graphics)
   {
    lineStyle(2,0xF6ECC1);
    for (var i:int=0;i<=Math.floor(xlengh/pitch);i++)
    {
     moveTo(i*pitch,0);
     lineTo(i*pitch,-ylengh);
    }
    for (var j:int=0;j<=Math.floor(ylengh/pitch);j++)
    {
     moveTo(0,-j*pitch);
     lineTo(xlengh,-j*pitch);
    }
   }
   return s;
  }
  private function drawline():void
  {
   
   with(coordinate.graphics)
   {
    lineStyle(2,0x784016);    
    lineTo(xlengh,0);
    moveTo(0,0);
    lineTo(0,-ylengh);
    for (var i:int=0;i<=Math.floor(xlengh/pitch);i++)
    {
     moveTo(i*pitch,0);
     lineTo(i*pitch,3);
    }
    for (var j:int=0;j<=Math.floor(ylengh/pitch);j++)
    {
     moveTo(0,-j*pitch);
     lineTo(-3,-j*pitch);
    }
    endFill();
   }
  }
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
demo版本所展示的部分功能: 1、创建窗口 2、设置窗口宽高,标题 3、拖拽边缘缩放窗口,拖拽窗口 4、双击顶端的标题栏,最大化和缩放 5、实现不同的窗口机制 等等……………… core核心包结构初略讲解: IWindow接口:定义所有窗口,并且Window实现了该接口 Module类:模块基类 PopModule类:弹出型环境类,继承Module PopWindow类:弹出型窗口,继承Window Window类:窗口基类 WindowEvent类:窗口事件类 WindowsManager类:窗口管理基类 core核心包实现讲解: 凡是flash cs3中继承Module的元件,都可以直接在元件的第一帧撰写代码,并且在编译的过程中会自动把代码编译出来并继承Module类,在第一帧所拽写的代码可以通过实例化后来访问,比如下面贴出的"控制台源码"就是如此写的 如果需要提供特殊环境等,可以继承Module撰写,比如PopModule,控制台的父类就是PopModule,在控制台的源码中,我们可以看得到他直接访问了window属性,得到的就是控制台所在的窗口对象 Window类实现了基本窗口操作,比如拖拽,关闭,显示等,与WindowManager是配套使用 如果需要更复杂的窗口,可以继承Window类撰写,比如PopWindow,FixedWindow类的父类就是PopWindow,在FixedWindow中,我们只需要把PopWindow的状态和模式定死在window和fixed就可以了,而PopWindow本来就是一个普通的窗口,因此创建Create窗口的时候,直接使用PopWindow即可创建一个普通的窗口,在PopWindow中,默认窗口的状态和模式都为window 核心包是另外一个公司做的。核心代码是反编译过来的。代码经过测试能正常运行。 此代码仅供学习,请勿传播。 flash版窗体系统demo观看地址:http://www.xiaos8.com/uploads/flash/window.swf

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值