`
jssanshengshi
  • 浏览: 16534 次
  • 性别: Icon_minigender_1
  • 来自: wuxi
社区版块
存档分类
最新评论

flex 虚线 + 沿着虚线移动的箭头 完

    博客分类:
  • flex
阅读更多
1.虚线方向的箭头
package view.line
{
	import flash.geom.Point;
	
	import mx.core.UIComponent;

	public class ArrowUI extends UIComponent
	{
		public static var CENTER:String = "CENTER";
		
		public static var STARTPOINT:String = "STARTPOINT";
		
		public static var ENDPOINT:String = "ENDPOINT";
		
		private var _endPoint:Point;//终点坐标
		
		private var _startPoint:Point;//起点坐标
		
		private var radius:uint=6;//箭头大小
		// 箭头所放的位置,"center" ,"startPoint","endPoint"
		private var _arrowAlign:String = "ENDPOINT";
		
		public function ArrowUI()
		{
			super();
		}
		public function draw():void
		{
			this.graphics.clear();
			var p2:Point;
			var angle:Number = Util.getAngle(startPoint,endPoint);
			switch(_arrowAlign)
			{
				case ArrowUI.ENDPOINT:
					p2= startPoint;
					break;
				case ArrowUI.STARTPOINT:
					p2 = endPoint;
					break;
				default:
					p2= new Point((startPoint.x+endPoint.x)/2,(startPoint.y+endPoint.y)/2);
					break;	
			}
			var centerX:Number = p2.x - radius * Math.cos(angle*(Math.PI/180));
			var centerY:Number = p2.y + radius * Math.sin(angle*(Math.PI/180));
			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));
			var p1:Point = new Point( leftX , leftY);
			var p3:Point= new Point(rightX , rightY);	
			var p4:Point= new Point(centerX , centerY);	
			drawArrow(p1,p2,p3,p4);
		}
		
		protected function drawArrow(p1:Point,p2:Point,p3:Point,p4:Point):void
		{
            this.graphics.beginFill(fillColor);
			this.graphics.lineStyle(1, fillColor, 1);
            this.graphics.moveTo(p1.x,p1.y);
            this.graphics.lineTo(p2.x,p2.y);
            this.graphics.lineTo(p3.x,p3.y);
            this.graphics.lineTo(p4.x,p4.y); 
            this.graphics.lineTo(p1.x,p1.y);
            this.graphics.endFill(); 
		}
		
		//线填充色(箭头)
		private var _fillcolor:uint = 0x66FF66;//0x0000FF
		
		public function set fillColor(color:uint):void
		{
			_fillcolor=color;
		}
		[Bindable]
		public function get fillColor():uint
		{
			return _fillcolor;
		}
		//起点坐标
		public function set startPoint(p:Point):void
		{
			_startPoint = p;
		}
		public function get startPoint():Point
		{
			return _startPoint;
		}
		//终点点坐标
		public function set endPoint(p:Point):void
		{
			_endPoint = p;
		}
		public function get endPoint():Point
		{
			return _endPoint;
		}
		
		// 箭头所放的位置,"center" ,"startPoint","endPoint"
		public function get arrowAlign():String
		{
			return _arrowAlign;	
		}
		public function set arrowAlign(str:String):void
		{
			_arrowAlign = str;	
		}
	}
}

2. 虚线,及沿着虚线移动的箭头
package view.line
{
	import flash.geom.Point;
	
	import mx.containers.Canvas;
	import mx.effects.Move;
	import mx.events.EffectEvent;


	public class DottedLine extends Canvas
	{
		private var _endPoint:Point;//终点坐标
		
		private var _startPoint:Point;//起点坐标
		
		private var _lineSize:Number = 5;//虚线 空白长度
		
		private var radius:uint=6;//箭头大小
		
		private var _doMove:Boolean = true;// 是否移动
		
		private var _duration:Number = 5000;//箭头运动时间
		
		private var myMove:Move;
				
		private var arrow:ArrowUI ;
		[Bindable]
		private var tooltip:String;
		public function DottedLine()
		{
			//TODO: implement function
			super();  
			this.toolTip = tooltip; 
			arrow = new ArrowUI;
		}
		
		public function drawLine():void
		{
            var xTemp:Number = 0; // x 坐标 count的偏移x坐标差
            var yTemp:Number = 0; // y 坐标 count的偏移y坐标差
            var count:uint = 1; //虚实相间
            
			if(!_startPoint || !_endPoint || _startPoint == _endPoint)
			{
				return;	
			}
			this.graphics.clear();
			this.graphics.beginFill(fillColor);
			this.graphics.lineStyle(1, fillColor, 1);
            this.graphics.moveTo(_startPoint.x,_startPoint.y);
            
            var xLen:Number = -_startPoint.x + _endPoint.x;//起始点x坐标差距
            var yLen:Number = -_startPoint.y + _endPoint.y;//起始点y坐标差距

            var lineLen:Number = Math.sqrt(xLen * xLen + yLen * yLen);
            
//            if(_duration == 0)
//            	_duration = Math.round(lineLen * 20);
            
			xTemp =( _lineSize * xLen )/lineLen;//求出 x 坐标 count的偏移x坐标差
			yTemp =( _lineSize * yLen )/lineLen;//求出 y 坐标count 的偏移y坐标差
			
			var x0:Number = _startPoint.x;
			var y0:Number = _startPoint.y;
			while((lineLen/_lineSize) >= 1)
			{
				x0 = x0 + xTemp;//求出偏移x坐标
				y0 = y0 + yTemp ;//求出偏移y坐标
				if(0 == count%2)
				{
					this.graphics.moveTo(x0,y0);
				}else
				{
					this.graphics.lineTo(x0,y0);
				}
				count++;
				lineLen = lineLen - _lineSize;
			}
//			this.graphics.lineTo(_endPoint.x , _endPoint.y);
            this.graphics.endFill();
            //画箭头 
            arrow.startPoint = this.startPoint;
       		arrow.endPoint = this.endPoint;
       		arrow.arrowAlign = ArrowUI.STARTPOINT;
       		arrow.fillColor = this.fillColor;
   			arrow.draw(); 
			var num:Number = this.numChildren;
   			if(_doMove)
   			{ 
           		this.stopMove();
				myMove = new Move(); 
	       		myMove.xFrom = -endPoint.x + startPoint.x;
	       		myMove.yFrom = -endPoint.y + startPoint.y;
				myMove.xTo = 0;
	       		myMove.yTo = 0;
	       		myMove.repeatCount = 0;
	       		myMove.target = arrow;
	       		myMove.duration = _duration;
				myMove.play();
   			}
   			
		}
		
		//线填充色(箭头)
		private var _fillcolor:uint=0x00FF00;//0x808080
		
		public function set fillColor(color:uint):void
		{
			_fillcolor=color;
		}
		[Bindable]
		public function get fillColor():uint
		{
			return _fillcolor;
		}
		//起点坐标
		public function set startPoint(p:Point):void
		{
			_startPoint = p;
		}
		public function get startPoint():Point
		{
			return _startPoint;
		}
		//终点点坐标
		public function set endPoint(p:Point):void
		{
			_endPoint = p;
		}
		public function get endPoint():Point
		{
			return _endPoint;
		}
		//虚线 空白长度
		public function set lineSize(num:Number):void
		{
			_lineSize = num;
		}
		public function get lineSize():Number
		{
			return _lineSize;
		}
		//是否显示箭头
		public function set arrowVisible(num:Boolean):void
		{
			arrow.visible = num;
		}
		public function set arrowDoMove(num:Boolean):void
		{
			stopMove();
			_doMove = num;
			arrow.visible = num;
		}
		//是否移动箭头
		public function stopMove():void
		{
			if(null != myMove && myMove.isPlaying)
  			{
  				myMove.stop();	
  			}
		}
		public function get isPlaying():Boolean
		{
			return myMove.isPlaying;
		}
		
		public function get arrowObj():ArrowUI
		{
			return arrow;
		}
	}
}
  • 大小: 5.9 KB
分享到:
评论
1 楼 lijunjie2010 2012-05-09  
能把源码上传上来吗?谢谢了,我做了,没有移动的效果。

相关推荐

    Flex++ & Bison++ for windows

    Flex++ 和 Bison++ 是两个强大的工具,主要用于在编程领域创建解析器和词法分析器,尤其在构建编译器和解释器时非常有用。这两个工具的Windows版本使得开发者能够在Windows平台上进行类似的工作,而无需依赖于Unix或...

    Flash+Flex+Air移动开发入门经典 pdf

    《flash+flex+air移动开发入门经典——适用于android、ios和blackberry》 第1章 flash、flex和air简介 1 1.1 adobe flash 1 1.2 actionscript 3.0 2 1.2.1 ecmascript 2 1.2.2 关键概念 3 1.3 flex框架 11 ...

    flash+flex+air移动开发入门经典(4)源码

    flash+flex+air移动开发入门经典(4)源码 最后一个了

    Flex4.6+java+servlet上传图片例子+图片上传预览

    这个"Flex4.6+java+servlet上传图片例子+图片上传预览"的项目,结合了前端的Flex技术和后端的Java Servlet,为我们提供了一个完整的解决方案。下面将详细解释这个项目的各个组成部分及其工作原理。 首先,让我们来...

    Flash+Flex+Air 移动开发入门经典——适用于Android、iOS、BlackBerry系统

    Flash+Flex+Air 移动开发入门经典——适用于Android、iOS、BlackBerry系统

    flex+java+mysql登录

    在"flex+java+mysql登录"这个场景中,我们主要探讨的是如何使用Flex客户端与Java后台进行通信,以及通过Java处理数据库交互来实现用户登录功能。 1. Flex数据库操作:Flex中的数据访问通常通过 BlazeDS 或 LCDS ...

    Flash+Flex+AIR移动开发入门经典

    《Flash+Flex+AIR移动开发入门经典》是一本专为初学者设计的教程,全面讲解了使用Adobe的Flash、Flex和AIR技术进行移动应用开发的知识体系。这本书旨在帮助读者掌握如何利用这些强大的工具来创建跨平台的交互式应用...

    flex++编译开源源码

    flex编译器开源源码下载!自动生成C文件,有限自动机原理!

    最新最全的FLEX++网站源码

    Flex++是一种基于Adobe Flex技术的开发框架,用于创建富互联网应用程序(Rich Internet Applications,简称RIA)。这个"最新最全的FLEX++网站源码"压缩包包含了一个完整的Flex网站实例,为开发者提供了一套学习和...

    flex4+spring+blazeds整合技术

    《Flex4+Spring+BlazeDS整合技术详解》 在当今的Web开发中,富互联网应用程序(Rich Internet Applications,简称RIA)已经成为一种趋势,而Flex作为Adobe提供的RIA开发框架,结合Spring的优秀企业级服务管理和...

    Flex4+J2EE+Blazeds配置jspweb工程

    Flex4、J2EE和Blazeds是构建富互联网应用程序(RIA)的组合技术,用于创建交互性强、用户体验丰富的Web应用。在这个配置过程中,我们将深入理解这三个组件的作用以及如何将它们整合到一个JSP Web工程中。 1. Flex4...

    linux抓包工具tcpdump的依赖m4,flex,flex++,bison,yacc,libpcap,tcpdump

    ln -sf /usr/local/bin/flex++ /usr/bin/flex++ ln -sf /usr/local/bin/bison /usr/bin/bison ln -sf /usr/local/bin/yacc /usr/bin/yacc 抓包工具的使用 usr/local/bin/tcpdump -i eth0 host 127.0.0.1 -w a....

    MyEclipse7.5+flex4+spring3.0.5+struts2.2.1+hibernate3.6.0+blazeds4.0.0.14931完美整合方案

    本方案提供了一种集成化的开发环境,即"MyEclipse7.5+flex4+spring3.0.5+struts2.2.1+hibernate3.6.0+blazeds4.0.0.14931完美整合方案",它将多个流行的技术框架整合在一起,为Web应用程序开发提供了一个强大的平台...

    Flex4.5 + Tomcat6.0 + MyEclipse 9.0+ Java+Blazeds环境配置和使用

    标题与描述均聚焦于“Flex4.5 + Tomcat6.0 + MyEclipse 9.0+ Java+Blazeds环境配置和使用”,这一主题涉及了多种技术栈的集成,包括Flex4.5(FlashBuilder)、Tomcat6.0、MyEclipse 9.0、Java以及Blazeds。...

    Flex4+Spring+ibatis实战系列教程

    在 Flex 与服务器端的交互中,主要有三种常见的数据访问方式: 1. **HTTPService**:这是最基础的数据访问方式,通过 HTTP 协议发送请求到服务器,获取 XML、JSON 等格式的数据。这种方式简单易用,但不支持双向...

    flex as3虚线

    在Flex AS3开发中,创建虚线效果是常见的需求,特别是在UI设计中,虚线常用于表示分隔、选中状态或非连续路径等。本文将深入探讨如何在Flex AS3环境中实现虚线效果。 首先,我们需要理解AS3(ActionScript 3)是...

    flex4.0+hibernate+spring项目

    博客项目,采用flex4.0+...项目的功能不重要,重要的是参考这个框架在可以开发flex+spring+hibernate项目了;在查看代码前,请先安装下载地址Flash Builder 4 Beta2的序列号: 1424-4008-9664-3602-3439-1711 ...

    Flex+JAVA+BlazeDS开发环境配置(Java工程和Flex工程独立)

    BlazeDS 是一款开源的服务器端技术,由 Adobe 提供,主要用于实现 Java 应用程序与 Flex 客户端之间的...通过上述步骤,开发者可以建立一个基础的 Flex+Java+BlazeDS 开发环境,从而开始构建富互联网应用程序(RIA)。

    WEB项目-集成Flex3+BlazeDS3.2+Spring2.5.6集成方式二

    【集成Flex3+BlazeDS3.2+Spring2.5.6的另一种方式】\n\n在上一讲中,我们介绍了如何将Flex3、BlazeDS3.2和Spring2.5.6集成在一起,构建一个强大的WEB项目。本讲我们将探讨集成方式二,该方法采用Spring的侦听配置...

    Myeclipse6.5+flex3+Blazeds+spring+hibernate完美整合

    Myeclipse6.5+flex3+Blazeds+spring+hibernate完美整合,写的非常详细

Global site tag (gtag.js) - Google Analytics