`

flex实现手写在线签名

阅读更多

 转载自:http://www.iteye.com/topic/377994

Actionscript代码 复制代码

  1. package com.humanmonth.home.component.page.signature   
  2. {   
  3.     import flash.display.CapsStyle;   
  4.     import flash.display.JointStyle;   
  5.     import flash.display.LineScaleMode;   
  6.     import flash.events.MouseEvent;   
  7.        
  8.     import mx.containers.Canvas;   
  9.     import mx.core.UIComponent;   
  10.        
  11.     /**   
  12.      * 实现手写签名的白板   
  13.      * @author presses   
  14.      *    
  15.      */   
  16.     public class WriteArea extends Canvas   
  17.     {   
  18.         /**   
  19.          *笔    
  20.          */   
  21.         public var signature:UIComponent=new UIComponent();   
  22.         /**   
  23.          *颜色    
  24.          */   
  25.         public var myColor:uint=0x000000;   
  26.         /**   
  27.          *线条粗细    
  28.          */   
  29.         public var lineSize:int=1;   
  30.         /**   
  31.          *模式    
  32.          */   
  33.         public var pattern:String="圆珠笔";   
  34.         /**   
  35.          *当前的x座标    
  36.          */   
  37.         private var cX:Number;   
  38.         /**   
  39.          *当前的y座标    
  40.          */   
  41.         private var cY:Number;   
  42.            
  43.         public function WriteArea()   
  44.         {   
  45.             this.addChild(signature);   
  46.             this.addEventListener(MouseEvent.MOUSE_DOWN,beginDraw);   
  47.             this.addEventListener(MouseEvent.MOUSE_UP,endDraw);   
  48.         }   
  49.            
  50.         /**   
  51.          *鼠标压下时,开始画图,并添加移动鼠标画线的监听器    
  52.          */   
  53.         private function beginDraw(event:MouseEvent):void{   
  54.             this.signature.graphics.lineStyle(lineSize,myColor,1,true,LineScaleMode.NONE,CapsStyle.ROUND,JointStyle.ROUND,99);   
  55.             this.signature.graphics.beginFill(myColor);   
  56.             this.cX=event.localX;   
  57.             this.cY=event.localY;   
  58.             this.signature.graphics.moveTo(this.cX,this.cY);   
  59.             this.addEventListener(MouseEvent.MOUSE_MOVE,drawIng);   
  60.         }   
  61.            
  62.         /**   
  63.          * 鼠标移动时,画线    
  64.          */   
  65.         private function drawIng(event:MouseEvent):void{   
  66.             if(this.pattern=="圆珠笔"){   
  67.                 this.signature.graphics.moveTo(this.cX,this.cY);   
  68.             }   
  69.             this.signature.graphics.lineTo(event.localX,event.localY);   
  70.             this.cX=event.localX;   
  71.             this.cY=event.localY;   
  72.         }   
  73.            
  74.         /**   
  75.          * 结束画图    
  76.          */   
  77.         private function endDraw(event:MouseEvent):void{   
  78.             this.removeEventListener(MouseEvent.MOUSE_MOVE,drawIng);   
  79.         }   
  80.            
  81.     }   
  82. }  

效果图:http://rea.humanmonth.com/

package com.humanmonth.home.component.page.signature
{
	import flash.display.CapsStyle;
	import flash.display.JointStyle;
	import flash.display.LineScaleMode;
	import flash.events.MouseEvent;
	
	import mx.containers.Canvas;
	import mx.core.UIComponent;
	
	/**
	 * 实现手写签名的白板
	 * @author presses
	 * 
	 */
	public class WriteArea extends Canvas
	{
		/**
		 *笔 
		 */
		public var signature:UIComponent=new UIComponent();
		/**
		 *颜色 
		 */
		public var myColor:uint=0x000000;
		/**
		 *线条粗细 
		 */
		public var lineSize:int=1;
		/**
		 *模式 
		 */
		public var pattern:String="圆珠笔";
		/**
		 *当前的x座标 
		 */
		private var cX:Number;
		/**
		 *当前的y座标 
		 */
		private var cY:Number;
		
		public function WriteArea()
		{
			this.addChild(signature);
			this.addEventListener(MouseEvent.MOUSE_DOWN,beginDraw);
			this.addEventListener(MouseEvent.MOUSE_UP,endDraw);
		}
		
		/**
		 *鼠标压下时,开始画图,并添加移动鼠标画线的监听器 
		 */
		private function beginDraw(event:MouseEvent):void{
			this.signature.graphics.lineStyle(lineSize,myColor,1,true,LineScaleMode.NONE,CapsStyle.ROUND,JointStyle.ROUND,99);
			this.signature.graphics.beginFill(myColor);
			this.cX=event.localX;
			this.cY=event.localY;
			this.signature.graphics.moveTo(this.cX,this.cY);
			this.addEventListener(MouseEvent.MOUSE_MOVE,drawIng);
		}
		
		/**
		 * 鼠标移动时,画线 
		 */
		private function drawIng(event:MouseEvent):void{
			if(this.pattern=="圆珠笔"){
				this.signature.graphics.moveTo(this.cX,this.cY);
			}
			this.signature.graphics.lineTo(event.localX,event.localY);
			this.cX=event.localX;
			this.cY=event.localY;
		}
		
		/**
		 * 结束画图 
		 */
		private function endDraw(event:MouseEvent):void{
			this.removeEventListener(MouseEvent.MOUSE_MOVE,drawIng);
		}
		
	}
}


            上传签名图片(上传到服务器或保存到本地):fp10(flash player)可以不经服务器,直接把图片保存到本地。但为了兼容fp9,这里的实现是先把图片上传到服务器,再调用下载功能。实现的思路是先把画图的组件转化为BitmapData,然后再编码成jpeg格式,并上传到服务器。最后调用客户端下载。这里要注意的一点是,fp10对下载的api作了限制,下载动作只能由用户触发。代码如下:

Actionscript代码 复制代码
  1. package com.humanmonth.home.component.page.signature.remote   
  2. {   
  3.     import com.humanmonth.global.Config;   
  4.        
  5.     import flash.display.BitmapData;   
  6.     import flash.events.Event;   
  7.     import flash.net.FileReference;   
  8.     import flash.net.URLLoader;   
  9.     import flash.net.URLRequest;   
  10.     import flash.net.URLRequestMethod;   
  11.        
  12.     import mx.controls.Alert;   
  13.     import mx.graphics.codec.JPEGEncoder;   
  14.     import mx.managers.CursorManager;   
  15.        
  16.     /**   
  17.      * 图片的上传及下载   
  18.      * @author presses   
  19.      *    
  20.      */   
  21.     public class Connector   
  22.     {   
  23.         private var file:FileReference;   
  24.         private var myId:String;   
  25.         public function Connector()   
  26.         {   
  27.         }   
  28.            
  29.         /**   
  30.          * 保存图片   
  31.          */   
  32.         public function savePic(myData:BitmapData,fun:Function):void{   
  33.             CursorManager.setBusyCursor();   
  34.             var url:String=Config.picLink+"rea/pic.do?action=savePic&timestamp="+new Date().getTime();   
  35.             var request:URLRequest = new URLRequest(url);              
  36.             request.method=URLRequestMethod.POST;   
  37.             request.contentType = "application/octet-stream";    
  38.             request.data=new JPEGEncoder(80).encode(myData);   
  39.             var loader:URLLoader = new URLLoader();                     
  40.             loader.load(request) ;           
  41.             loader.addEventListener(Event.COMPLETE, fun) ;     
  42.             loader.addEventListener(Event.COMPLETE,initMyId);   
  43.             Alert.show("正在上传图片,等待数秒后,即可下载图片");           
  44.         }   
  45.            
  46.         private function initMyId(event:Event):void{   
  47.             CursorManager.removeBusyCursor();   
  48.             var loader:URLLoader=URLLoader(event.target);   
  49.             this.myId=loader.data;   
  50.             Alert.show("上传图片成功,现在可以点击‘下载图片’按钮,保存图片到本地。");   
  51.                
  52.         }   
  53.            
  54.         /**   
  55.          * 下载图片    
  56.          */   
  57.         public function downloadFile(event:Event):void{   
  58.             var url2:String=Config.picLink+"rea/pic.do?action=queryPicById&pid="+myId+"&timestamp="+new Date().getTime();   
  59.             var req:URLRequest=new URLRequest(url2);   
  60.             file=new FileReference();   
  61.             file.download(req,"humanmonth.jpg");   
  62.         }   
  63.     }   
  64. }  
package com.humanmonth.home.component.page.signature.remote
{
	import com.humanmonth.global.Config;
	
	import flash.display.BitmapData;
	import flash.events.Event;
	import flash.net.FileReference;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.net.URLRequestMethod;
	
	import mx.controls.Alert;
	import mx.graphics.codec.JPEGEncoder;
	import mx.managers.CursorManager;
	
	/**
	 * 图片的上传及下载
	 * @author presses
	 * 
	 */
	public class Connector
	{
		private var file:FileReference;
		private var myId:String;
		public function Connector()
		{
		}
		
		/**
		 * 保存图片
		 */
		public function savePic(myData:BitmapData,fun:Function):void{
		    CursorManager.setBusyCursor();
			var url:String=Config.picLink+"rea/pic.do?action=savePic&timestamp="+new Date().getTime();
 			var request:URLRequest = new URLRequest(url); 			
 			request.method=URLRequestMethod.POST;
		 	request.contentType = "application/octet-stream"; 
 			request.data=new JPEGEncoder(80).encode(myData);
            var loader:URLLoader = new URLLoader();                  
            loader.load(request) ;        
            loader.addEventListener(Event.COMPLETE, fun) ; 	
            loader.addEventListener(Event.COMPLETE,initMyId);
            Alert.show("正在上传图片,等待数秒后,即可下载图片");		
		}
		
		private function initMyId(event:Event):void{
		    CursorManager.removeBusyCursor();
			var loader:URLLoader=URLLoader(event.target);
			this.myId=loader.data;
			Alert.show("上传图片成功,现在可以点击‘下载图片’按钮,保存图片到本地。");
			
		}
		
		/**
		 * 下载图片 
		 */
		public function downloadFile(event:Event):void{
			var url2:String=Config.picLink+"rea/pic.do?action=queryPicById&pid="+myId+"&timestamp="+new Date().getTime();
			var req:URLRequest=new URLRequest(url2);
			file=new FileReference();
			file.download(req,"humanmonth.jpg");
		}
	}
}

 

Actionscript代码 复制代码
  1. package com.humanmonth.home.component.page.signature   
  2. {   
  3.     import com.humanmonth.home.component.page.signature.remote.Connector;   
  4.        
  5.     import flash.display.BitmapData;   
  6.     import flash.events.Event;   
  7.     import flash.events.MouseEvent;   
  8.        
  9.     import mx.core.Application;   
  10.     import mx.events.ColorPickerEvent;   
  11.     import mx.events.FlexEvent;   
  12.     import mx.events.ListEvent;   
  13.     import mx.events.NumericStepperEvent;   
  14.        
  15.     /**   
  16.      * 控制面版   
  17.      * @author presses   
  18.      *    
  19.      */   
  20.     public class MyControlBarAs extends MyControlBar   
  21.     {   
  22.         public var writearea:WriteArea;   
  23.         private var connector:Connector=new Connector();   
  24.         public function MyControlBarAs()   
  25.         {   
  26.             super();   
  27.             this.addEventListener(FlexEvent.CREATION_COMPLETE,myInit);   
  28.         }   
  29.            
  30.         private function myInit(event:Event):void{   
  31.             this.writearea=Application.application.signature.writearea;   
  32.             this.reset.addEventListener(MouseEvent.CLICK,cleanArea);   
  33.             this.size.addEventListener(NumericStepperEvent.CHANGE,setLineSize);   
  34.             this.color.addEventListener(ColorPickerEvent.CHANGE,setColor);   
  35.             this.pattern.addEventListener(ListEvent.CHANGE,setPattern);   
  36.             this.savePic.addEventListener(MouseEvent.CLICK,savePicture);   
  37.             this.downloadPic.addEventListener(MouseEvent.CLICK,connector.downloadFile)   
  38.         }   
  39.         /**   
  40.          * 保存图片    
  41.          */   
  42.         private function savePicture(event:Event):void{   
  43.             var myData:BitmapData=new BitmapData(this.writearea.width,this.writearea.height);   
  44.             myData.draw(this.writearea);   
  45.             connector.savePic(myData,enableDownload);    
  46.         }   
  47.            
  48.         private function enableDownload(event:Event):void{   
  49.             this.downloadPic.enabled=true;   
  50.         }   
  51.         /**   
  52.          * 设置模式    
  53.          */   
  54.         private function setPattern(event:Event):void{   
  55.             this.writearea.pattern=String(this.pattern.value);   
  56.         }   
  57.         /**   
  58.          * 清空写字区    
  59.          */   
  60.         private function cleanArea(event:Event):void{   
  61.             this.writearea.signature.graphics.clear();   
  62.         }   
  63.            
  64.         /**   
  65.          * 设置线条粗细    
  66.          */   
  67.         public function setLineSize(event:Event):void{   
  68.             this.writearea.lineSize=this.size.value;   
  69.         }   
  70.            
  71.         /**   
  72.          * 设置颜色   
  73.          */   
  74.         public function setColor(event:Event):void{   
  75.             this.writearea.myColor=uint(this.color.value);   
  76.         }   
  77.            
  78.            
  79.     }   
  80. }  
分享到:
评论

相关推荐

    Flex 3.0 手写签名系统

    在Flex 3.0中,我们可以使用`Flash Player`的内置API来实现手写签名的功能。用户可以通过鼠标或触摸设备模拟笔迹,绘制出签名。关键在于监听鼠标的移动事件,并在每次鼠标移动时在舞台上添加新的图形对象,如线条,...

    flex 手写在线签名实现代码第1/2页

    本文所述的在线手写签名功能在Flex环境下实现,分为两个主要部分:画图功能和上传图片功能。 画图功能: 1. 创建一个Canvas容器,并在其上添加一个UIComponent作为签名的白板,这个组件用于绘制签名。 2. 定义基本...

    flex实现在线翻译

    【标题】:“flex实现在线翻译” 在Web应用开发中,Flex是一种基于Adobe Flash Player或Adobe AIR运行时的富互联网应用程序(RIA)框架。它允许开发者创建具有交互性和动态视觉效果的用户界面。在这个实例中,我们...

    flexwheel flex实现的图片滚动效果

    "Flexwheel"是基于Flex实现的一种特定组件,主要用于创建图片滚动和时间滚动的效果。这种效果常用于增强用户体验,尤其是在展示大量信息或者产品图片时,能够以吸引人的方式呈现内容。 首先,我们要理解什么是Flex...

    flex 实现网页在线拍照,支持ie8浏览器

    在本案例中,我们讨论的主题是如何使用Flex实现一个功能,允许用户在网页上进行在线拍照,并且这个功能需要兼容老旧的Internet Explorer 8(IE8)浏览器,同时支持照片预览。 在Flex中实现在线拍照,首先需要考虑的...

    flex实现的翻书功能的网站漂亮的flex实现swf及源码

    在本案例中,"flex实现的翻书功能的网站漂亮的flex实现swf及源码",显然指的是使用Flex技术创建了一个模拟真实书籍翻页效果的交互式Web应用。这个应用不仅提供了视觉上的吸引力,还具有高度的用户参与度,让浏览者...

    flex实现在线拍照

    标题中的“flex实现在线拍照”指的是使用Adobe Flex技术来创建一个功能,允许用户通过Web浏览器进行实时拍照。Flex是一个开源的、基于ActionScript的框架,主要用于构建富互联网应用程序(RIA)。它提供了丰富的用户...

    Flex实现Camera摄像头在线拍照功能

    在探讨“Flex实现Camera摄像头在线拍照功能”这一主题时,我们深入分析了如何利用Adobe Flex框架结合Camera组件来实现在线拍照的功能。Flex是一种强大的RCP(Rich Client Platform)开发工具,由Adobe Systems开发,...

    Flex实现的计算器

    在这个"Flex实现的计算器"项目中,开发者使用了Adobe Flex来设计和开发一个基本的计算器,具备进行基本数学运算如加、减、乘、除的功能。 1. **Flex框架介绍** Flex提供了MXML和ActionScript两种编程语言,其中...

    基于java+flex实现的聊天程序

    《基于Java+Flex实现的聊天程序详解》 在信息技术领域,构建实时的在线聊天系统是一项常见的挑战。本项目“基于Java+Flex实现的聊天程序”提供了一种有效的解决方案,它结合了Java的强大后端处理能力和Flex的富...

    Flex实现的xmpp消息发送接收

    在这个特定的场景中,"Flex实现的xmpp消息发送接收"是指使用Flex技术来实现在Android、iOS等移动设备以及IE浏览器上的即时通讯功能。 XMPP(Extensible Messaging and Presence Protocol)是一种开放标准的协议,...

    flex实现边框

    本篇文章将详细解释如何使用Flex来实现边框以及添加标题,并重点关注在标题框中显示文本的实现方法。 首先,我们需要了解Flex中的容器和组件。容器是Flex应用程序的基础,它们可以包含一个或多个组件,如按钮、文本...

    flex实现简单浏览器

    flex实现简单浏览器,flex AIR中HTML控件实现了简单的网页浏览效果

    flex实现数据表格。

    在本实例中,“flex实现数据表格”指的是使用Flex技术来创建一个数据展示组件,即Datagrid,用于显示结构化的数据。Datagrid是Flex中非常重要的一个组件,它允许用户以表格形式查看和操作大量数据。 Flex Datagrid...

    flex布局Flex实现常见布局的汇总

    一类是给flex容器设置的,一类是给flex子元素设置的,本文在介绍一些典型场景实现的同时也会顺带讲解部分属性,当然更详细的内容可以阅读MDN上的教程。接下来需要使用到flex-grow属性,这个是flex子元素上的属性,...

    j2ee+FLEX实现在线拍照

    在这个“j2ee+FLEX实现在线拍照”的项目中,Flex将提供拍照和图像处理的功能,用户可以直接在Web浏览器中进行拍照或选择本地图片上传;而后端的J2EE服务器则处理图片上传、存储和可能的进一步处理。 为了实现这一...

    flex实现QQ面板效果

    flex实现QQ面板效果flex实现QQ面板效果flex实现QQ面板效果flex实现QQ面板效果

    flex实现旋转效果

    在本文中,我们将深入探讨如何使用Flex来实现一个图片旋转效果,这在产品展示或交互式界面设计中非常常见。Flex是一种强大的、基于XML的框架,用于构建富互联网应用程序(RIA),尤其适用于创建动态、响应式的用户...

    Flex实现打印预览

    在Flex中实现打印预览功能可以帮助用户在正式打印前检查文档布局和格式,确保打印效果符合预期。以下是对Flex中实现打印预览功能的详细解释: 一、Flex中的打印服务 Flex内置了`flash.printing.PrintJob`类,提供了...

    flex实现阴影效果

    在本文中,我们将深入探讨如何使用Flex技术来实现阴影效果。Flex是一种强大的开发框架,主要用于构建富互联网应用程序(RIA),特别是在Adobe AIR和Flash Player环境中。它提供了丰富的组件库、强大的数据绑定机制...

Global site tag (gtag.js) - Google Analytics