- 浏览: 308025 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (118)
- VS2008 (2)
- JAVA (34)
- AJAX (1)
- C# (1)
- Flex (16)
- FMS (6)
- SQLSERVER (1)
- ORACLE (1)
- Quartz (1)
- struts2 (1)
- java数据结构 (1)
- java设计模式 (3)
- JSF (0)
- web (2)
- jbpm4 (4)
- J2EE (1)
- webservice (2)
- javascript (8)
- spring (3)
- lucene (0)
- linux (9)
- ibatis (1)
- JPA (2)
- 外挂 (0)
- VB (0)
- Hibernate (1)
- OSGI (8)
- EXT (4)
- Maven (1)
- SpringSecurity (0)
- activiti (0)
- 项目开发 (0)
- 项目管理 (7)
- android (0)
- FFMPEG (1)
- C (2)
- eclipse (1)
最新评论
-
默默得守候在你的身边:
给力
java与Delphi写的dll交互 -
默默得守候在你的身边:
java与Delphi写的dll交互 -
fuguitong:
[url][url][url][url][url][url][ ...
doc转swf -
baidu_25402161:
到结束的时候一直 Can't delete processIn ...
一个请假单流程的实现(struts2.1.8+spring2.5+hibernate3集成jbpm4.3) -
lohaoo1:
nice!
java面包屑导航制作
用到的有三个类,BrokenLine.as,BrokenLineEdge.as,BrokenLineRect.as,效果如图:
当拖到直线后可以折回去。
源码在附件上。有bug的话希望提出来哈。谢谢。
svn地址http://forever-framework.googlecode.com/svn/design/,
箭头效果已经做好了。在svn上。
箭头的制作参照了这位师兄的内容http://zean.iteye.com/blog/1070471
核心类:
package org.forever.view { import flash.events.MouseEvent; import flash.geom.Point; import mx.collections.ArrayList; import mx.core.UIComponent; import mx.logging.ILogger; import mx.logging.Log; import mx.utils.UIDUtil; import spark.components.BorderContainer; import spark.components.SkinnableContainer; /** * 折线的实现(初始化状态是3点两边) */ public class BrokenLine extends UIComponent { private var _app_container:SkinnableContainer; private static var _log:ILogger = Log.getLogger("org.forever.view.BrokenLine"); private var _fromPoint:Point; private var _toPoint:Point; private var _firstRect:BrokenLineRect; private var _secondRect:BrokenLineRect; private var _thirdRect:BrokenLineRect; private var _firstEdge:BrokenLineEdge; private var _rect_w:Number = 6; private var _startMove:Boolean = false; private var _moving:Boolean = false; private var _currentClickRect:BrokenLineRect; private var _rectList:ArrayList; private var _edgeList:ArrayList; public function BrokenLine() { } /**画折线的方法*/ public function draw():void{ initContainer(); _firstRect = new BrokenLineRect(); _secondRect = new BrokenLineRect(); _thirdRect = new BrokenLineRect(); _firstEdge = new BrokenLineEdge(); initFirstRect(); initSecondRect(); initThirdRect(); initFirstEdge(); //建立矩形关联边 _firstRect.secondEdge = _firstEdge; _secondRect.firstEdge = _firstEdge; //建立边关联矩形 _firstEdge.firstRect = _firstRect; _firstEdge.secondRect = _secondRect; //建立矩形关联的矩形 _firstRect.nextRect = _thirdRect; _secondRect.prevRect = _thirdRect; _thirdRect.prevRect = _firstRect; _thirdRect.nextRect = _secondRect; //添加顺序导致组件的重叠z轴顺序 addChild(_firstEdge); addChild(_firstRect); addChild(_thirdRect); addChild(_secondRect); _rectList = new ArrayList(new Array(_firstRect,_thirdRect,_secondRect)); _edgeList = new ArrayList(new Array(_firstEdge)); } /**初始化容器事件*/ public function initContainer():void{ _app_container.addEventListener(MouseEvent.MOUSE_MOVE,appContainerMouseMoveHandler); _app_container.addEventListener(MouseEvent.MOUSE_UP,appContainerMouseUpHandler); } /**获取指定两个矩形的距离,AB=√[(x1-x2)²+(y1-y2)²]*/ public function getDistance(firstRect:BrokenLineRect,secondRect:BrokenLineRect):Number{ return Math.sqrt(Math.pow(firstRect.x - secondRect.x,2) + Math.pow(firstRect.y - secondRect.y,2)); } /**处理拖动180度直线后,去掉左右控制点的方法*/ public function process180():Boolean{ if(_currentClickRect.isSplit){//是拆分过的控制点 var a:Number = getDistance(_currentClickRect,_currentClickRect.prevRect); var b:Number = getDistance(_currentClickRect,_currentClickRect.nextRect); var c:Number = getDistance(_currentClickRect.prevRect,_currentClickRect.nextRect); var cosC:Number=(a*a+b*b-c*c)/(2*a*b); //求出控制点拖动时夹角的及时角度 var acos:Number =(int)(Math.acos(cosC) * 180 / Math.PI); _log.debug("*************角度:"+acos+"**************"); if(_currentClickRect.direction==0 && acos<=165){//第一次将控制点拖动时,角度会逐渐变小,小于165度后确定为正方向 _currentClickRect.direction = 1; _log.debug("*************正方向拖动中**************"); }else if(_currentClickRect.direction==1 && acos>=165){//如果满足正方向拖动后,在往反方向拖动,角度会逐渐变大,大于165度后确定为反方向 _currentClickRect.direction = -1; _log.debug("*************反方向拖动中**************"); } //如果反方向行动,并且角度在指定范围内,去掉前后控制点 if(_currentClickRect.direction==-1 && acos>=176 && acos<=180){ _log.debug("*************进入去掉前后控制点范围**************"); //获取当前控制点矩形的前驱前驱矩形和后继后继矩形 var prevPrevRect:BrokenLineRect = _currentClickRect.prevRect.prevRect; var nextNextRect:BrokenLineRect = _currentClickRect.nextRect.nextRect; //将当前控制点矩形的前驱矩形和后继矩形从容器界面中移除 this.removeChild(_currentClickRect.prevRect); this.removeChild(_currentClickRect.nextRect); //更新各个控制点的关联关系 _currentClickRect.prevRect = prevPrevRect; _currentClickRect.nextRect = nextNextRect; prevPrevRect.nextRect = _currentClickRect; nextNextRect.prevRect = _currentClickRect; //if(prevPrevRect!=_firstRect){//头矩形没有第一条边 //prevPrevRect.firstEdge = _currentClickRect.secondEdge; //} prevPrevRect.secondEdge = _currentClickRect.secondEdge; _currentClickRect.secondEdge.firstRect = prevPrevRect; _currentClickRect.secondEdge.drawLine(); updateRectTop(_currentClickRect.secondEdge); this.removeChild(_currentClickRect.firstEdge); _currentClickRect.firstEdge = null; _currentClickRect.secondEdge = null; _currentClickRect.isSplit = false; _currentClickRect.x = (_currentClickRect.prevRect.x + _currentClickRect.nextRect.x)/2; _currentClickRect.y = (_currentClickRect.prevRect.y + _currentClickRect.nextRect.y)/2; _moving = false; _startMove = false; _currentClickRect.direction = 0; return true; } } return false; } public function appContainerMouseMoveHandler(event:MouseEvent):void{ if(_moving){ _currentClickRect.x = mouseX; _currentClickRect.y = mouseY; if(process180())return; _currentClickRect.refresh(); } } public function appContainerMouseUpHandler(event:MouseEvent):void{ if(_moving && null != _currentClickRect){ _startMove = false; _moving = false; //_log.debug(_currentClickRect.desc + "结束移动......"); } } public function addRectEvent(rect:BrokenLineRect):void{ rect.addEventListener(MouseEvent.MOUSE_DOWN,rectMouseDownHandler); rect.addEventListener(MouseEvent.MOUSE_MOVE,rectMouseMoveHandler); rect.addEventListener(MouseEvent.MOUSE_UP,rectMouseUpHandler); } /**矩形鼠标释放事件,一旦释放,停止拖动*/ public function rectMouseUpHandler(event:MouseEvent):void{ _startMove = false; _moving = false; //_log.debug(_currentClickRect.desc + "结束移动......"); } public function rectMouseDownHandler(event:MouseEvent):void{ _startMove = true;//点击组件做移动准备 _moving = false;//并未真正移动 _currentClickRect = event.currentTarget as BrokenLineRect; _currentClickRect.print(); //_log.debug(_currentClickRect.desc + "被点击,准备开始移动......坐标:x=" + _currentClickRect.x + "y=" + _currentClickRect.y ); } public function rectMouseMoveHandler(event:MouseEvent):void{ if(_startMove && !_moving){//如果准备好移动 //既不是头矩形,也不是尾矩形,也没有拆分过 if(_currentClickRect != _firstRect && _currentClickRect!=_secondRect && !_currentClickRect.isSplit){ var _newRectOne:BrokenLineRect = createRect();//新增第一个控制点矩形 //该矩形是当前控制点矩形和前驱矩形的中间矩形 _newRectOne.x = (_currentClickRect.x + _currentClickRect.prevRect.x)/2; _newRectOne.y = (_currentClickRect.y + _currentClickRect.prevRect.y)/2; _newRectOne.desc = UIDUtil.createUID(); //新增第二个控制点矩形,该矩形是当前控制点矩形和后继矩形的中间矩形 var _newRectTwo:BrokenLineRect = createRect(); _newRectTwo.x = (_currentClickRect.x + _currentClickRect.nextRect.x)/2; _newRectTwo.y = (_currentClickRect.y + _currentClickRect.nextRect.y)/2; _newRectTwo.desc = UIDUtil.createUID(); //获取当前控制点前驱控制点的第二条关联边 var _secondEdge:BrokenLineEdge = _currentClickRect.prevRect.secondEdge; //更新关联边的第一个控制点为当前控制点 _secondEdge.firstRect = _currentClickRect; //更新关联边的第二个控制点为当前控制点的后继控制点 _secondEdge.secondRect = _currentClickRect.nextRect; //更新当前矩形的第二条关联边 _currentClickRect.secondEdge = _secondEdge; //重绘边 _secondEdge.drawLine(); updateRectTop(_secondEdge);//将该边的两端控制点置顶 //新增一条边,建立该节点与前驱节点的边关系 var _newEdge:BrokenLineEdge = new BrokenLineEdge(); _newEdge.firstRect = _currentClickRect.prevRect; _newEdge.secondRect = _currentClickRect; _newEdge.desc = UIDUtil.createUID(); _newEdge.drawLine(); addChild(_newEdge); addChild(_newRectOne); addChild(_newRectTwo); updateRectTop(_newEdge); //更新当前控制点矩形的前驱矩形的关联边为新边 _currentClickRect.prevRect.secondEdge = _newEdge; //更新当前控制点矩形的第一条关联边 _currentClickRect.firstEdge = _newEdge; //更新控制点矩形之间的引用关系 _currentClickRect.prevRect.nextRect = _newRectOne; _currentClickRect.nextRect.prevRect = _newRectTwo; _newRectOne.prevRect = _currentClickRect.prevRect; _newRectOne.nextRect = _currentClickRect; _newRectTwo.prevRect = _currentClickRect; _newRectTwo.nextRect = _currentClickRect.nextRect; _currentClickRect.prevRect = _newRectOne; _currentClickRect.nextRect = _newRectTwo; _currentClickRect.isSplit = true;//标记为已拆分 //添加到集合中 _edgeList.addItem(_newEdge); } _moving = true; _log.debug(_currentClickRect.desc + "移动中......坐标:x=" + _currentClickRect.x + "y=" + _currentClickRect.y); } } /**创建一个新的矩形点*/ public function createRect():BrokenLineRect{ var _newRect:BrokenLineRect = new BrokenLineRect(); _newRect.width = _rect_w; _newRect.height = _rect_w; _newRect.setStyle("borderColor","#70B2EE"); addRectEvent(_newRect); return _newRect; } /**更新指定边的两端矩形置顶*/ public function updateRectTop(_edge:BrokenLineEdge):void{ this.setChildIndex(_edge.firstRect,this.numChildren-1); this.setChildIndex(_edge.secondRect,this.numChildren-1); } /**初始化第一个端点到中点的边*/ public function initFirstEdge():void{ _firstEdge.firstRect = _firstRect; _firstEdge.secondRect = _secondRect; _firstEdge.desc = UIDUtil.createUID(); _firstEdge.drawLine(); } /**初始化中点矩形*/ public function initThirdRect():void{ _thirdRect.width = _rect_w; _thirdRect.height = _rect_w; _thirdRect.setStyle("borderColor","#70B2EE"); _thirdRect.x = (_firstRect.x + _secondRect.x)/2; _thirdRect.y = (_firstRect.y + _secondRect.y)/2; _thirdRect.desc = "_thirdRect"; addRectEvent(_thirdRect); } /**初始化第二个端点的矩形*/ public function initSecondRect():void{ _secondRect.width = _rect_w; _secondRect.height = _rect_w; _secondRect.x = _toPoint.x; _secondRect.y = _toPoint.y - _secondRect.height/2; _secondRect.setStyle("borderColor","#70B2EE"); _secondRect.desc = "_secondRect"; addRectEvent(_secondRect); } /**初始化第一个端点的矩形*/ public function initFirstRect():void{ _firstRect.width = _rect_w; _firstRect.height = _rect_w; _firstRect.x = _fromPoint.x - _firstRect.width; _firstRect.y = _fromPoint.y - _firstRect.height/2; _firstRect.setStyle("borderColor","#70B2EE"); _firstRect.desc = "_firstRect"; addRectEvent(_firstRect); } /******************* get and set ******************/ /**线终点*/ public function get toPoint():Point { return _toPoint; } /** * @private */ public function set toPoint(value:Point):void { _toPoint = value; } /**线起点*/ public function get fromPoint():Point { return _fromPoint; } /** * @private */ public function set fromPoint(value:Point):void { _fromPoint = value; } /**显示所有可变组件的容器*/ public function get app_container():SkinnableContainer { return _app_container; } /** * @private */ public function set app_container(value:SkinnableContainer):void { _app_container = value; } public function get moving():Boolean { return _moving; } public function set moving(value:Boolean):void { _moving = value; } } }
辅助类:
package org.forever.view { import flash.events.MouseEvent; import flash.geom.Point; import mx.core.UIComponent; import mx.logging.ILogger; import mx.logging.Log; /**折线用的线条边类*/ public class BrokenLineEdge extends UIComponent { private static var _log:ILogger = Log.getLogger("org.forever.view.BrokenLineEdge"); private var _fromPoint:Point; private var _toPoint:Point; private var _lineColor:uint=0x000000; private var _thickness:Number = 1; private var _alpha:Number = 1; private var _firstRect:BrokenLineRect; private var _secondRect:BrokenLineRect; private var _desc:String; public function BrokenLineEdge() { super(); _fromPoint = new Point(); _toPoint = new Point(); addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler); } public function mouseDownHandler(e:MouseEvent):void{ print(); } public function print():void{ _log.debug("*******************("+_desc+")信息************************************"); _log.debug("第一个端点矩形:"+_firstRect.desc); _log.debug("第二个端点矩形:"+_secondRect.desc); _log.debug("*********************************************************************"); } /**绘制线条*/ public function drawLine():void{ _log.debug("重绘边" + _desc + ";" + _firstRect.desc + ":" + _secondRect.desc); fromPoint.x = _firstRect.x + _firstRect.width/2; fromPoint.y = _firstRect.y + _firstRect.height/2; toPoint.x = _secondRect.x+_secondRect.width/2; toPoint.y = _secondRect.y + _secondRect.height/2; this.graphics.clear(); this.graphics.lineStyle(_thickness,_lineColor,_alpha); this.graphics.moveTo(_fromPoint.x,_fromPoint.y); this.graphics.lineTo(_toPoint.x,_toPoint.y); } /**线起点*/ public function get fromPoint():Point { return _fromPoint; } /** * @private */ public function set fromPoint(value:Point):void { _fromPoint = value; } /**线终点*/ public function get toPoint():Point { return _toPoint; } /** * @private */ public function set toPoint(value:Point):void { _toPoint = value; } /**线条颜色*/ public function get lineColor():uint { return _lineColor; } /** * @private */ public function set lineColor(value:uint):void { _lineColor = value; } /**关联的第一个端点*/ public function get firstRect():BrokenLineRect { return _firstRect; } /** * @private */ public function set firstRect(value:BrokenLineRect):void { _firstRect = value; } /**关联的第二个端点*/ public function get secondRect():BrokenLineRect { return _secondRect; } /** * @private */ public function set secondRect(value:BrokenLineRect):void { _secondRect = value; } public function get desc():String { return _desc; } public function set desc(value:String):void { _desc = value; } } }
控制点类:
package org.forever.view { import flash.events.MouseEvent; import mx.logging.ILogger; import mx.logging.Log; import spark.components.BorderContainer; /**折线用到的矩形点类*/ public class BrokenLineRect extends BorderContainer { private static var _log:ILogger = Log.getLogger("org.forever.view.BrokenLineRect"); private var _firstEdge:BrokenLineEdge; private var _secondEdge:BrokenLineEdge; private var _prevRect:BrokenLineRect; private var _nextRect:BrokenLineRect; private var _isSplit:Boolean = false; private var _rect_w:Number = 6; private var _count:Number = 0; private var _direction:Number = 0; private var _desc:String; public function BrokenLineRect() { } public function print():void{ _log.debug("*******************("+_desc+")信息************************************"); _log.debug("前驱矩形:" + (_prevRect!=null?_prevRect.desc:"没有前驱矩形")); _log.debug("后继矩形:" + (_nextRect!=null? _nextRect.desc:"没有后继矩形")); _log.debug("第一条关联边:" + (_firstEdge!=null? _firstEdge.desc:"没有第一条关联边")); _log.debug("第二条关联边:" + (_secondEdge!=null? _secondEdge.desc:"没有第二条关联边")); _log.debug("*********************************************************************"); } public function refresh():void{ updateFirstEdgePosition(); updateSecondEdgePosition(); updateNextRectPosition(); updatePrevRectPosition(); } /**更新第二条边的位置*/ public function updateSecondEdgePosition():void{ if(_secondEdge != null){ _secondEdge.drawLine(); } } /**更新后继矩形的位置*/ public function updateNextRectPosition():void{ if(_nextRect != null && _nextRect.nextRect != null){ _nextRect.x = (x + _nextRect.nextRect.x)/2; _nextRect.y = (y + _nextRect.nextRect.y)/2; } } /**更新前驱矩形的位置*/ public function updatePrevRectPosition():void{ if(_prevRect != null && _prevRect.prevRect != null){ _prevRect.x = (x + _prevRect.prevRect.x)/2; _prevRect.y = (y + _prevRect.prevRect.y)/2; } } /**更新第一条边的位置*/ public function updateFirstEdgePosition():void{ if(_firstEdge != null){ _firstEdge.drawLine(); } } public function updateFirstEdge():void{ if(_firstEdge != null ){ } } /**矩形关联的第一条边(左边)*/ public function get firstEdge():BrokenLineEdge { return _firstEdge; } /** * @private */ public function set firstEdge(value:BrokenLineEdge):void { _firstEdge = value; } /**矩形关联的第二条边(右边)*/ public function get secondEdge():BrokenLineEdge { return _secondEdge; } /** * @private */ public function set secondEdge(value:BrokenLineEdge):void { _secondEdge = value; } /**前驱矩形节点*/ public function get prevRect():BrokenLineRect { return _prevRect; } /** * @private */ public function set prevRect(value:BrokenLineRect):void { _prevRect = value; } /**后继矩形节点*/ public function get nextRect():BrokenLineRect { return _nextRect; } /** * @private */ public function set nextRect(value:BrokenLineRect):void { _nextRect = value; } /**是否拆分过,即创建了该矩形与前驱(后继)矩形的中点矩形*/ public function get isSplit():Boolean { return _isSplit; } /** * @private */ public function set isSplit(value:Boolean):void { _isSplit = value; } public function get desc():String { return _desc; } public function set desc(value:String):void { _desc = value; } /**拖动方向,0未初始化,1正方向,-1反方向*/ public function get direction():Number { return _direction; } /** * @private */ public function set direction(value:Number):void { _direction = value; } } }
发表评论
-
flex标尺的实现
2011-08-28 21:49 2208效果图: 组件类: package org.for ... -
flex设计器功能拆分之二(撤销与恢复)
2011-03-16 22:01 2545撤销与恢复主要用到了 ... -
flex设计器功能拆分之一(调整组件大小位置)
2011-03-13 13:02 1994只要是设计器就逃不脱对组件的动态调整。比如大小,位置是最常见的 ... -
flex4与JavaScript交互
2010-11-06 09:10 3032利用flex来开发程序很快,有时难免会和js交互. flex ... -
flex表格设计器
2010-07-17 19:30 5117未完,开发中...... 记录每次修改过程。 第一次开发, ... -
flex折线的实现
2010-06-10 17:17 2381看效果: 可以无限折: 带源码,欢迎交流 请查看htt ... -
flex视频播放器
2010-05-13 07:46 0wwew -
flex_java文件上传(一)
2010-05-09 22:34 1795功能如下: 能够批量上传勾上的文件,能够批量删除指定的文件 ... -
flex4正式版注册号
2010-04-10 21:54 1572网上找的,可以用 C:\WINDOWS\system32\d ... -
Chart之PieChart简单应用
2010-04-04 12:13 7169效果图: 功能:能够修改指定国家的获奖信息,能够指定要显示 ... -
Chart之ColumnChart简单应用
2010-04-04 10:03 2484效果图: 代码: <?xml version=&q ... -
flex4视频教程
2010-03-29 09:48 0http://you.video.sina.com.cn/vl ... -
flex视音频通讯-摄像头及麦克风检测
2010-03-29 09:44 926flex视音频通讯-摄像头及麦克风检测 <mx: ... -
在线中文api
2010-03-25 18:17 1530flex4注册码:1424-4008-9664-3602-34 ... -
flex框架集合
2010-02-27 09:10 10621月17日 Flex开源框架汇总 Cairngorm ... -
BlazeDS的初步使用
2009-11-26 11:30 2435刚接触这东西的时候去网上了解了哈,BlazeDS用于flex和 ... -
datagrid 嵌套单选按钮互斥方法
2009-11-24 11:20 1801在一次使用datagrid的时候,嵌入了单选按钮组件: 突 ...
相关推荐
1. **Flex折线图** 折线图是用于展示连续性数据变化趋势的图表,如时间序列数据。在Flex中,我们可以使用Spark或 Halo 组件库中的Chart类来创建折线图。首先,需要引入所需的库,然后定义一个Chart对象,并设置其...
总的来说,实现Flex中的移动折线图需要理解LineChart组件的特性,熟练掌握DragManager的用法,以及灵活处理数据和视图的同步。通过以上步骤,你可以创建一个交互性强、易于使用的移动线图,满足用户在大数据集上的...
在本案例中,"flex 实现的折线"指的是使用Flex技术创建的图形元素,具体为一条由多个点连接形成的折线。这种折线通常会用在数据可视化、地图绘制或任何需要表示路径或轨迹的应用中。 在Flex中,我们可以利用`mx....
标题“直线和折线flex实现经典源码”暗示了这个压缩包可能包含了一些关于如何使用Flex布局来创建直线和折线效果的示例代码。 Flex布局,全称为Flexible Box布局,是CSS3中的一种布局模式,旨在解决传统块级布局...
本示例“Flex画线(直线,折线)完美实现”专注于提供一种高效、灵活的方法来绘制动态直线和折线,并允许用户进行实时编辑。通过这个项目,开发者可以学习如何在Flex应用中实现这一功能,提升用户体验。 首先,Flex是...
Flex是一种基于ActionScript和Flash Player运行时环境的开发框架,常用于...文件"flex统计图 柱状 饼图折线"可能包含了实现这些图表的示例代码,通过研究这些代码,你可以更深入地理解如何在实际项目中应用这些概念。
在Flex技术的支持下,ArcGIS可以与Web应用程序相结合,实现动态、交互式的地图展示。本教程将深入讲解如何利用ArcGIS for Flex在地图上显示柱状图、饼状图和折线图,以便于用户更直观地理解地理数据。 首先,我们...
这些Demo将有助于开发者学习如何使用Flex的图表组件,快速上手并实现自己的数据可视化需求。每个编号的文件可能代表一个独立的示例,比如1可能是柱状图的基础用法,2可能是饼图的进阶展示,3可能是折线图的动态效果...
在本压缩包文件"Charts"中,我们聚焦于Flex中的统计图表功能,包括饼状图、柱状图和折线图的实例。这些图表是数据可视化的重要工具,帮助用户直观地理解复杂的数据信息。 饼状图在统计学中被广泛用于显示部分与整体...
同时,Flex提供了丰富的API和事件处理机制,使得开发者能够实现动态更新、交互操作等功能,提高用户体验。因此,熟练掌握Flex中的图表绘制技术,对于任何需要数据可视化的项目都是非常有价值的。
这个示例代码展示了如何在Flex应用中实现用户通过鼠标绘制直线、清除直线以及多点折线的功能。以下是详细的知识点解析: 1. **Flex架构**:这个应用基于Adobe Flex框架,使用Spark组件库,如`s:Application`、`s:...
用flex开发过程中积累下来的资料,供flex初学者学习! 以下为部分资料标题: /**************************...flex 动态生成柱状图,折线图_IT空间_百度空间 (2) . . . . . . /***************************************/
`mx:LineChart` 是Flex中用于绘制折线图的一个图表组件。它可以通过`dataProvider`属性与数据源进行绑定,这里的`dataProvider`就是之前定义的`ArrayCollection`。 ```as3 showDataTips="true" fontSize="12" y=...
基于ArcGIS Flex API实现动态标绘,1.2版本,支持ArcGIS Flex API 3.6。支持绘制功能和编辑功能。 1.2版本新增对基本标绘符号的支持,包括点、多点、折线、手绘线、多边形、手绘多边形,矩形等,并提供相应编辑功能...
1. **Flex图表组件**:Flex提供了多种图表类型,包括折线图、柱状图、饼图等。曲线图,即折线图,用于展示数据随时间变化的趋势。它通过连接一系列数据点形成连续的线条,使用户能够直观地看到数据的变化情况。 2. ...
- 远程数据服务:通过AMF(Action Message Format)技术,Flex可以轻松地与服务器端的业务逻辑进行通信,实现数据的实时更新和同步。 - 企业级应用:Flex常用于构建企业内部的工作流管理系统、报表系统、CRM系统等,...