您当前的位置: 首页 >  ar

Jave.Lin

暂无认证

  • 2浏览

    0关注

    704博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

AS3 HorizontalTrackBar ---- 水平摄量条

Jave.Lin 发布时间:2012-04-12 14:56:22 ,浏览量:2

TrackBarButton:

package
{
	import flash.display.GradientType;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.filters.BitmapFilter;
	import flash.filters.BitmapFilterQuality;
	import flash.filters.ColorMatrixFilter;
	import flash.filters.DropShadowFilter;
	import flash.filters.GlowFilter;
	import flash.geom.Matrix;

	/**
	 * 摄量条按钮类
	 * @author Jave.Lin
	 */	
	public class TrackBarButton extends Control
	{
		private var _isDowned:Boolean=false;
		private var _isOnClickShake:Boolean=true;
		private var _brightFilter:ColorMatrixFilter;
		private var _glowFilter:GlowFilter;
		private var _dropShawFilter:DropShadowFilter;
		private var _filtersArr:Array=[];
		
		public override function set width(value:Number):void
		{
			if(width!=value)
			{
				_w=_h=value;
				
				refreshBackground();
			}
		}
		
		public override function set height(value:Number):void
		{
			if(height!=value)
			{
				_w=_h=value;
				
				refreshBackground();
			}
		}
		
		public function TrackBarButton()
		{
			super();
		}
		
		public function setWidthHeight($width:Number,$height:Number):void
		{
			_w=$width;
			_h=$height;
			
			refreshBackground();
		}
		
		protected override function initialize():void
		{
			_w=_h=10;
			
			var matrix:Array = new Array();
			//反色
//			matrix = matrix.concat([-1, 0, 0, -.1, 255]); // red
//			matrix = matrix.concat([0, -1, 0, -.1, 255]); // green
//			matrix = matrix.concat([0, 0, -1, -.1, 255]); // blue
//			matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha
			matrix = matrix.concat([1, 0, 0, -.4, 0]); // red
			matrix = matrix.concat([0, 1, 0, -.4, 0]); // green
			matrix = matrix.concat([0, 0, 1, -.4, 0]); // blue
			matrix = matrix.concat([0, 0, 0, 1, 0]); // alpha
			
			_brightFilter=new ColorMatrixFilter(matrix);
			
			_glowFilter=new GlowFilter(0xffff00,.3,3,3,3);
			
			var color:Number = 0;
			var angle:Number = 45;
			var alpha:Number = 0.8;
			var blurX:Number = 3;
			var blurY:Number = 3;
			var distance:Number = 3;
			var strength:Number = 1;
			var inner:Boolean = false;
			var knockout:Boolean = false;
			var quality:Number = BitmapFilterQuality.HIGH;
			_dropShawFilter=new DropShadowFilter(distance,
				angle,
				color,
				alpha,
				blurX,
				blurY,
				strength,
				quality,
				inner,
				knockout);

			_filtersArr.push(_dropShawFilter);
			
			this.filters=_filtersArr;
			
			if(stage)
			{
				onAddedToStageHandler();
			}
			else
			{
				addEventListener(Event.ADDED_TO_STAGE,onAddedToStageHandler);
			}
		}
		
		private function addFilter(filter:BitmapFilter):void
		{
			var index:int=_filtersArr.indexOf(filter);
			if(index==-1)_filtersArr.push(filter);
			else 
			{
				_filtersArr[index]=filter;
			}
			this.filters=_filtersArr;
		}
		
		private function removeFilter(filter:BitmapFilter):void
		{
			var index:int=_filtersArr.indexOf(filter);
			if(index!=-1)_filtersArr.splice(index,1);
			this.filters=_filtersArr;
		}
		
		private function onAddedToStageHandler(e:Event=null):void
		{
			removeEventListener(Event.ADDED_TO_STAGE,onAddedToStageHandler);
			
			addEventListener(Event.REMOVED_FROM_STAGE,onRemovedFromStageHandler);
			
			addEventListener(MouseEvent.MOUSE_OVER,onMouseOverHandler);
			addEventListener(MouseEvent.MOUSE_OUT,onMouseOutHandler);
			//默认抖动的
			if(_isOnClickShake)
			{
				addEventListener(MouseEvent.MOUSE_DOWN,onMouseDownHandler);
				addEventListener(MouseEvent.MOUSE_UP,onMouseUpHandler);
			}
		}
		
		private function onMouseUpHandler(e:MouseEvent=null):void
		{
			if(_isDowned)
			{
				_isDowned=false;
				removeFilter(_brightFilter);
			}
		}
		
		private function onMouseDownHandler(e:MouseEvent):void
		{
			if(!_isDowned)
			{
				_isDowned=true;
				addFilter(_brightFilter);
			}
		}
		
		public function onMouseOutHandler(e:MouseEvent):void
		{
			removeEventListener(MouseEvent.MOUSE_OUT,onMouseOutHandler);
			addEventListener(MouseEvent.MOUSE_OVER,onMouseOverHandler);
			
			onMouseUpHandler();
			removeFilter(_glowFilter);
		}
		
		public function onMouseOverHandler(e:MouseEvent):void
		{
			removeEventListener(MouseEvent.MOUSE_OVER,onMouseOverHandler);
			addEventListener(MouseEvent.MOUSE_OUT,onMouseOutHandler);
			addFilter(_glowFilter);
		}
		
		private function onRemovedFromStageHandler(e:Event):void
		{
			removeEventListener(Event.REMOVED_FROM_STAGE,onRemovedFromStageHandler);
			removeEventListener(MouseEvent.MOUSE_OVER,onMouseOverHandler);
			removeEventListener(MouseEvent.MOUSE_OUT,onMouseOutHandler);
			removeEventListener(MouseEvent.MOUSE_DOWN,onMouseDownHandler);
			removeEventListener(MouseEvent.MOUSE_UP,onMouseUpHandler);
		}
		
		protected override function refreshBackground():void
		{
			//绘制一个圆即可
			this.graphics.clear();

			var halfW:Number=_w/2;
			var halfH:Number=_h/2;
			
			this.graphics.lineStyle(1,0x224422,.8);
			var times:Number=4;
			
//			this.graphics.moveTo(halfW,0);
//
//			var perAngle:Number=(Math.PI*2)/180;
//			for (var i:int = 0; i < 180; i++) 
//			{
//				this.graphics.lineTo(Math.cos(i*perAngle)*halfW,Math.sin(i*perAngle)*halfH); 
//			}
			
//			this.graphics.beginFill(0xaaaaa);
//			this.graphics.drawCircle(0,0,halfW);
//			this.graphics.endFill();
			
			var m:Matrix=new Matrix();
			//渐变盒子的:大,小,角度,X位移,Y位移
			m.createGradientBox(_w*times,_h*times,0,-_w*1.1*times/2,-_h*1.1*times/2);
			
			this.graphics.beginGradientFill(GradientType.RADIAL,[0xffffff,0xffffff,0xaaffaa],[1,.8,.4],[0,15,63],m);
			this.graphics.drawCircle(0,0,halfW);
			this.graphics.endFill();
		}
	}
}
TrackBarRuler类:

package 
{
	/**
	 * 跟踪条的尺寸类
	 * @author Jave.Lin
	 */	
	public class TrackBarRuler extends Control
	{
		public override function set width(value:Number):void
		{
			if(width!=value)
			{
				_w=value;					
				
				refreshBackground();
			}
		}
		
		public override function set height(value:Number):void
		{
			if(height!=value)
			{
				_h=value;
				
				refreshBackground();
			}
		}
		
		public function TrackBarRuler()
		{
			super();
		}
		
		protected override function initialize():void
		{
			_w=100;
			_h=10;
			
			refreshBackground();
		}
		
		protected override function refreshBackground():void
		{
			this.graphics.clear();
			
			this.graphics.lineStyle(.5);
			this.graphics.beginFill(0,.4);
			this.graphics.drawRect(0,(height/2-height/8),width,height/4);
			this.graphics.endFill();
		}
	}
}
HorizontalTrackBar类:

package
{
	import controlsEvents.TrackBarEvent;
	
	import flash.events.Event;
	import flash.events.MouseEvent;
	

	/**
	 * 水平跟踪条类(我自己认为是:摄量条)
	 * @author Jave.Lin
	 */	
	public class HorizontalTrackBar extends Control
	{
		private var _isDrawBorder:Boolean=true;
		private var _isDrawBackground:Boolean=true;
		
		private var _trackBarRuler:TrackBarRuler;
		private var _trackBarButton:TrackBarButton;
		
		private var _curValue:int=0;//当前值
		private var _minValue:int=0;//最小值
		private var _maxValue:int=100;//最大值
		private var _increment:int=5;//每次操作的增/减量
		
		private var _minPos:Number;//滚动器最近的距离
		private var _maxPos:Number;//滚动器最远的距离
		
		private var _buttonW:Number=10;
		private var _buttonH:Number=10;
		
		public function get buttonW():Number
		{
			return _buttonW;
		}
		
		public function set buttonW(value:Number):void
		{
			if(_buttonW!=value)
			{
				_buttonW=value;
				
				refreshBackground();
				onLayout();
			}
		}
		
		public function get buttonH():Number
		{
			return _buttonH;
		}
		
		public function set buttonH(value:Number):void
		{
			if(_buttonH!=value)
			{
				_h=_buttonH=value;
				
				refreshBackground();
				onLayout();
			}
		}
		
		//是否绘制边框
		public function get isDrawBorder():Boolean
		{
			return _isDrawBorder;
		}
		
		public function set isDrawBorder(value:Boolean):void
		{
			if(_isDrawBorder!=value)
			{
				_isDrawBorder=value;
				
				refreshBackground();
			}
		}
		//是否绘制背景
		public function get isDrawBackground():Boolean
		{
			return _isDrawBackground;
		}
		
		public function set isDrawBackground(value:Boolean):void
		{
			if(_isDrawBackground!=value)
			{
				_isDrawBackground=value;
				
				refreshBackground();
			}
		}
		
		public function get maxValue():int
		{
			return _maxValue;
		}
		
		public function set maxValue(value:int):void
		{
			if(_maxValue!=value)
			{
				if(_minValue>value)throw new Error("HorizontalTrackBar maxValue less then minValue error! maxValue:"+value+" minValue:"+_minValue);
				_maxValue=value;
				if(curValue>_maxValue)curValue=_maxValue;
			}
		}
		
		public function get minValue():int
		{
			return _minValue;
		}
		
		public function set minValue(value:int):void
		{
			if(_minValue!=value)
			{
				if(value>_maxValue)throw new Error("HorizontalTrackBar minValue more then maxValue error! minValue:"+value+" maxValue:"+_maxValue);
				_minValue=value;
				if(curValue            
关注
打赏
1664331872
查看更多评论
0.1559s