`
qiyueguxing
  • 浏览: 66363 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Flex实现画线(可拖拽、带箭头、可变色)

    博客分类:
  • Flex
阅读更多

在前人的基础上改了改,不多说,看效果图,贴代码:

 

 

 

主程序:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
				creationComplete="init()" fontSize="12" backgroundColor="#FFFFFF"
				layout="absolute" minWidth="955" minHeight="600">
	<mx:Script>
		<![CDATA[
			import com.njit.LinkLine;
			import com.njit.LinkMap;
			private var point1:Point;
			private var point2:Point;
			private var map1:LinkMap;
			private var map2:LinkMap;
			private var line:LinkLine;
			private var colorArr:Array=["0xFF0000","0x00FF00","0x0000FF","0xFFFF00"];
			private var k:int=0;
			
			private function init():void{
				point1=new Point(50,50);
				point2=new Point(300,300);
				map1=new LinkMap(point1,100,80,"主机",1);
				map2=new LinkMap(point2,100,80,"服务器",2);
				line=new LinkLine();
				line.setStartPoint(new Point(map1.getCenterX(),map1.getCenterY()));
				line.setEndPoint(new Point(map2.getCenterX(),map2.getCenterY()));
				line.setTip("哈哈哈哈");
				line.drawLine();
				map1.setLine(line,true);
				map2.setLine(line,false);
				this.addChild(map1);
				this.addChild(map2);
				this.addChild(line);
				
				var time:Timer = new Timer(1000,100);
				time.addEventListener(TimerEvent.TIMER,doTime);
				time.start();
			}
			//定时器设置颜色线条颜色变换
			private function doTime(event:TimerEvent):void{
				line.setLineColor(colorArr[k++]);
				line.drawLine();
				if(k>=colorArr.length)
					k=0;
			}
		]]>
	</mx:Script>
</mx:Application>

 

线条类:

package com.njit
{
	import flash.geom.Point;
	
	import mx.core.UIComponent;
	
	public class LinkLine extends UIComponent{
		
		//线起点
		private var startPoint:Point;
		//线终点
		private var endPoint:Point;
		//线条颜色
		private var lineColor:uint=0x000000;
		//线提示语
		private var tip:String=" ";
		//是否要箭头
		private var isArrow:Boolean=true;
		//箭头大小
		private var radius:uint=6;
		
		
		public function LinkLine(){
			super();
		}
		
		//获得线的角度
		public function getAngle():Number{
			var tmpx:Number=endPoint.x - startPoint.x;
			var tmpy:Number=startPoint.y - endPoint.y;
			var angle:Number= Math.atan2(tmpy,tmpx)*(180/Math.PI);
			return angle;
		}
		
		//画线
		public function drawLine():void{
			this.graphics.clear();
			this.graphics.lineStyle(2,lineColor);
			this.graphics.moveTo(startPoint.x,startPoint.y);
			this.graphics.lineTo(endPoint.x,endPoint.y);
			this.toolTip=tip;
			if(isArrow){
				var angle:Number = this.getAngle();
				var centerX:Number = endPoint.x - radius * Math.cos(angle*(Math.PI/180));
				var centerY:Number = endPoint.y + radius * Math.sin(angle*(Math.PI/180));
				var topX:Number = endPoint.x;
				var topY:Number = endPoint.y;
				var leftX:Number = centerX + radius * Math.cos((angle+120)*(Math.PI/180));
				var leftY:Number = centerY - radius * Math.sin((angle+120)*(Math.PI/180));
				var rightX:Number = centerX + radius * Math.cos((angle+240)*(Math.PI/180));
				var rightY:Number = centerY - radius * Math.sin((angle+240)*(Math.PI/180));
				this.graphics.beginFill(lineColor,1);
				this.graphics.lineStyle(2,lineColor,1);
				this.graphics.moveTo(topX,topY);
				this.graphics.lineTo(leftX,leftY);
				this.graphics.lineTo(centerX,centerY);
				this.graphics.lineTo(rightX,rightY);
				this.graphics.lineTo(topX,topY);
				this.graphics.endFill();
			}
		}
		public function removeLine():void{
			this.graphics.clear();
		}
		
		public function setStartPoint(point:Point):void{
			this.startPoint=point;
		} 
		public function setEndPoint(point:Point):void{
			this.endPoint=point;
		}
		public function setLineColor(color:uint):void{
			this.lineColor=color;
		}
		public function setTip(tip:String):void{
			this.tip=tip;
		}
		public function setArrow(flag:Boolean):void{
			this.isArrow=flag;
		}
	}
}

 

 

节点类:

 

package com.njit
{
	import flash.events.MouseEvent;
	import flash.geom.Point;
	
	import mx.containers.Canvas;
	import mx.controls.Image;
	import mx.controls.Label;
	import mx.events.MoveEvent;

	public class LinkMap extends Canvas{
		
		[Embed(source="assets/images/client.png")]
		[Bindable]
		public var c2s:Class;
		
		[Embed(source="assets/images/server.png")]
		[Bindable]
		public var s2c:Class;
		//网元名称
		private var ueName:String = "网元";
		private var lineList:Array =new Array();
		private var lineCount:int = 0;
		private var oldIndex:int = 0;
		private var ueImage:Image=new Image();
		private var ueLabel:Label=new Label();
		
		public function LinkMap(point:Point,width:int,height:int,ueName:String,type:int){
			super();
			this.x=point.x;
			this.y=point.y;
			this.width=width;
			this.height=height;
			this.ueName=ueName;
			this.init(type);
		}
		//初始化
		private function init(type:int):void{
			this.addEventListener(flash.events.MouseEvent.MOUSE_DOWN,dragBegin);
			this.addEventListener(flash.events.MouseEvent.MOUSE_UP,dragEnd);
			this.addEventListener(flash.events.MouseEvent.MOUSE_MOVE,dragIng2);
			this.addEventListener(mx.events.MoveEvent.MOVE,dragIng1);
			this.verticalScrollPolicy = "off";
			this.horizontalScrollPolicy = "off";
			this.initLabel();
			this.addChild(ueLabel);
			this.initUeImage(type);
			this.addChild(ueImage);
		}
		private function initUeImage(flag:int):void{
			switch(flag){
				case 1:
					ueImage.source = c2s;break;
				case 2:
					ueImage.source = s2c;break;
			}
			ueImage.x = 10;
			ueImage.y = 0;
		}
		
		private function initLabel():void{
			ueLabel.text = ueName;
			ueLabel.x = 0;
			ueLabel.y = 60;
			ueLabel.width = 99;
			ueLabel.height = 20;
		}
	
		private function dragIng1(event:MoveEvent):void{
			this.refreshLine();
		}
		private function dragIng2(event:MouseEvent):void{
			this.refreshLine();
		}
		private function refreshLine():void{
			var x:int = this.getCenterX();
			var y:int = this. getCenterY();
			for(var i:int=0;i<lineList.length;i++){				
				var lineFlag:LineFlag = lineList[i];
				var line:LinkLine = lineFlag.getLine();
				var isHeaderLine:Boolean = lineFlag.getFlag();
				if(isHeaderLine){
					line.setStartPoint(new Point(x,y));
				}else{
					line.setEndPoint(new Point(x,y));
				}	
				line.drawLine();
			}	
		}
		
		public function setLine(line:LinkLine,flag:Boolean):void{
			var lineFlag:LineFlag = new LineFlag(line,flag);
			lineList[lineCount] = lineFlag;
			lineCount++;
		}
		
		
		private function dragBegin(event:MouseEvent):void{
			oldIndex = this.parent.getChildIndex(this);
			this.parent.setChildIndex(this,this.parent.numChildren-1);
			this.startDrag(false);		
		}
		private function dragEnd(event:MouseEvent):void{
			this.parent.setChildIndex(this,oldIndex);
			this.stopDrag();		    
		}
		public function getCenterX():int{
			return this.x+30;
		}
		public function getCenterY():int{
			return this.y+30;
		}
	}
}

 

 

 

  • 大小: 9.2 KB
分享到:
评论
7 楼 织乐8 2012-08-10  
toolTip没有显示出来嘛。
6 楼 dsjob 2012-07-12  
学习学习学习学习学习学习学习学习学习学习
5 楼 yypdc 2012-05-07  
留名,后看
4 楼 ahww520 2011-07-08  
感谢楼主啊
3 楼 50980487 2011-06-23  
谢谢分享了...
2 楼 elvishehai 2010-06-01  
怎么画虚线箭头了,呵呵,请教一下,
1 楼 queue19 2010-05-20  
不错,学习了

相关推荐

    Flex实现拓扑,可以拖动 画线等

    在本案例中,"Flex实现拓扑,可以拖动 画线等",指的是利用Flex技术开发了一个具有拓扑图展示功能的应用,该应用允许用户进行节点拖动和连线绘制,提高了用户体验和互动性。 拓扑图通常用于表示网络、系统或流程中...

    flex 图片画线,拖动

    在IT行业中,尤其是在Web开发领域,"flex 图片画线,拖动"是一个常见的交互功能需求,用于增强用户体验。这个功能通常涉及到HTML5、CSS3和JavaScript等技术,特别是Flex布局和SVG图形技术。让我们详细探讨一下这个...

    flex节点画线,拖动节点

    本文将深入探讨“flex节点画线”与“拖动节点线动”的技术实现,帮助开发者掌握这两项关键技能。 首先,我们要理解什么是Flex节点。在Flex布局中,节点通常指的是容器内的子元素,这些子元素可以灵活地调整自己的...

    ArcGIS Flex API和SuperMap Flex API实现的军标箭头库

    本项目聚焦于使用Flex API,一种基于Adobe Flex的开发框架,来实现军标箭头库的构建。这涉及到Web GIS应用的开发,以及如何将军事符号标准(例如北约军标)与地图服务相结合。 首先,ArcGIS Flex API是由Esri公司...

    flex画线可以删除flex画线可以删除flex画线可以删除

    "flex画线可以删除"这个标题和描述可能是指在使用Flex布局时,如何通过CSS样式来实现或删除元素之间的分隔线。这里我们将深入探讨Flex布局以及如何控制其中的线条。 Flex布局(Flexible Box Layout)是CSS3引入的一...

    Flex画线,两点之间画线功能

    Flex 画线 两点画线 画布画线 Flex3.0 画线段

    Flex画线(直线,折线)完美实现

    总结来说,这个Flex项目展示了如何利用ActionScript 3和Flex框架创建动态画线和折线的功能,以及如何实现折点的拖动。这对于希望增强应用图形交互性的开发者来说,是一个宝贵的学习资源。通过深入理解并实践这个示例...

    flex画线flex画线flex画线flex画线

    在“flex画线”的场景中,我们通常是指利用Flexbox( Flexible Box 或 Flex 布局)来创建各种线性结构,如分割线、网格线或者自定义的布局分隔。 在CSS中,`display: flex;`属性是开启Flex布局的关键。一旦一个容器...

    flash/flex画曲线,绘图板

    这个类提供了丰富的绘图方法,如`beginFill()`、`lineTo()`、`moveTo()`等,可以用来画线、填充形状、绘制曲线。 3. **曲线绘制**: - 曲线绘制通常涉及到贝塞尔曲线,包括线性贝塞尔曲线和三次贝塞尔曲线。线性...

    flex拖拽画矩形

    flex真是个很强大的工具,当然demo也是我们学习的主要方法,flex拖拽画矩形,很流畅的,一点不卡

    Flex画线随意拖动

    在Flex技术中,实现“Flex画线随意拖动”功能主要涉及到图形绘制、事件处理以及交互设计等核心知识点。Flex是Adobe开发的一款用于构建富互联网应用程序(RIA)的开源框架,它基于ActionScript语言和MXML标记语言。...

    flex 画箭头 拖动示例

    flex画两个图片控件,用箭头把这两个连接起来,定制工作流程需要的flex技术例子。

    flex实现的拖拽控件

    在这个场景中,我们关注的是Flex实现的拖拽控件,这是一种交互式UI元素,允许用户通过鼠标操作移动元素,提供了丰富的用户体验。 拖拽功能在Flex中可以通过使用内置的DragManager类和Event类来实现。DragManager类...

    flex成功画一个点

    在Flex编程中,"flex成功画一个点"这个主题涉及到的是如何在用户界面元素上绘制一个像素级别的点。Flex是一种基于ActionScript的开源框架,主要用于创建富互联网应用程序(RIA)。在Flex中,我们可以利用图形库或者...

    flex 画线,并连接到物体上,

    综上所述,实现“flex 画线,并连接到物体上”的功能需要深入理解Flex的图形绘制、事件处理、对象定位以及布局管理等核心概念。通过合理的代码结构和事件驱动机制,我们可以创建出一个动态、灵活的连线工具,满足...

    flex画线动画示例.txt

    根据提供的文件信息,我们可以分析出该文件主要涉及的是使用Adobe Flex技术实现的一种画线动画效果。下面将对该示例中的关键技术点进行详细解读。 ### 一、Adobe Flex简介 Adobe Flex是一个免费开源的软件框架,...

    Flex画板实现~

    Flex画板实现主要涉及到的是Adobe Flex技术,这是一种用于构建富互联网应用程序(RIA)的开源框架。Flex使用MXML和ActionScript编程语言,基于Flash Player或Adobe AIR运行时环境,能够创建交互性强、视觉效果丰富的...

    Flex4实现拖拽功能

    在本主题中,我们将深入探讨如何在Flex4中实现图片的拖放功能,包括两种模式:拖动图片不删除原图和拖动图片后删除原图。 首先,我们需要了解Flex4中的DragManager类,它是实现拖放操作的核心。DragManager提供了...

    FLEX ActionScript超强仿visio画线功能

    在这个特定的项目中,“FLEX ActionScript超强仿visio画线功能”是指使用ActionScript实现的类似Microsoft Visio的图形绘制功能。 Visio是一款流行的图表和流程图绘制软件,允许用户轻松创建各种复杂的图形。在FLEX...

Global site tag (gtag.js) - Google Analytics