⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rolloverwedgeitemrenderer.as

📁 QS我也没用过
💻 AS
字号:
package
{

import flash.display.Graphics;
import flash.geom.Point;
import flash.geom.Rectangle;
import mx.charts.chartClasses.GraphicsUtilities;
import mx.charts.series.items.PieSeriesItem;
import mx.core.IDataRenderer;
import mx.graphics.IFill;
import mx.graphics.IStroke;
import mx.graphics.SolidColor;
import mx.skins.ProgrammaticSkin;
import flash.events.MouseEvent;
import mx.core.UIComponent;
import qs.utils.ColorUtils;

public class RollOverWedgeItemRenderer extends UIComponent implements IDataRenderer
{

	private static const SHADOW_INSET:Number = 8;
	public var color:Number;
	public var overColor:Number = 0xFF8822;
	public var downColor:Number = 0xFF8822;
	private var tracking:Boolean = false;
	private var mouseState:String = "";


	public function RollOverWedgeItemRenderer() 
	{
		super();
		this.addEventListener(MouseEvent.ROLL_OVER,rollOverHandler);
		this.addEventListener(MouseEvent.ROLL_OUT,rollOutHandler);
		this.addEventListener(MouseEvent.MOUSE_DOWN,downHandler);
	}

	private var _wedge:PieSeriesItem;
	
	private function rollOverHandler(e:MouseEvent):void
	{
		if(tracking)
			mouseState = "down";
		else
			mouseState = "over";
			
		invalidateDisplayList();
	}

	private function rollOutHandler(e:MouseEvent):void
	{
		if(tracking)
			mouseState = "over";
		else
			mouseState = "";
		invalidateDisplayList();
	}
	private function downHandler(e:MouseEvent):void
	{
		systemManager.addEventListener(MouseEvent.MOUSE_UP,upHandler,true);
		mouseState = "down";
		tracking= true;
		invalidateDisplayList();
	}

	private function upHandler(e:MouseEvent):void
	{
		systemManager.removeEventListener(MouseEvent.MOUSE_UP,upHandler,true);
		if(mouseState == "down")
			mouseState = "over";
		else
			mouseState = "";
			
		invalidateDisplayList();
		tracking= false;
	}

	public function get data():Object
	{
		return _wedge;
	}

	public function set data(value:Object):void
	{
		_wedge = PieSeriesItem(value);
		invalidateDisplayList();
	}
	override protected function updateDisplayList(unscaledWidth:Number,
												  unscaledHeight:Number):void
	{
		super.updateDisplayList(unscaledWidth, unscaledHeight);

		var g:Graphics = graphics;
		var f:IFill;
		g.clear();		
		
		if (!_wedge)
			return;

		var fillColor:Number;
		
		if(!isNaN(color))	
			fillColor = color;
		else
		{
			f = _wedge.fill;
			if(f is SolidColor)
			{
				fillColor = SolidColor(f).color;
			}
		}
		
		var hsv:Object;

		switch(mouseState)
		{
			case "over":
				if (isNaN(overColor))
				{
					hsv = ColorUtils.RGBToHSV(fillColor);
					hsv.v = Math.min(1,hsv.v*1.3);
					hsv.s = hsv.s *.8;
					fillColor = ColorUtils.HSVToRGB(hsv);
				}
				else
				{
					fillColor = overColor;
				}
				break;
			case "down":
				if(isNaN(downColor))
				{
					hsv = ColorUtils.RGBToHSV(fillColor);
					hsv.v = hsv.v*.8;
					hsv.s = hsv.s *.8;
					fillColor = ColorUtils.HSVToRGB(hsv);
				}
				else
				{
					fillColor = downColor;
				}
				break;
			default:
				break;
		}


		var stroke:IStroke = getStyle("stroke");		
		var radialStroke:IStroke = getStyle("radialStroke");		
				
		var outerRadius:Number = _wedge.outerRadius;
		var innerRadius:Number = _wedge.innerRadius;
		var origin:Point = _wedge.origin;
		var angle:Number = _wedge.angle;
		var startAngle:Number = _wedge.startAngle;
				
		if (stroke && !isNaN(stroke.weight))
			outerRadius -= Math.max(stroke.weight/2,SHADOW_INSET);
		else
			outerRadius -= SHADOW_INSET;
						
		outerRadius = Math.max(outerRadius, innerRadius);
		
		var rc:Rectangle = new Rectangle(origin.x - outerRadius,
										 origin.y - outerRadius,
										 2 * outerRadius, 2 * outerRadius);
		

		var startPt:Point = new Point(
			origin.x + Math.cos(startAngle) * outerRadius,
			origin.y - Math.sin(startAngle) * outerRadius);

		var endPt:Point = new Point(
			origin.x + Math.cos(startAngle + angle) * outerRadius,
			origin.y - Math.sin(startAngle + angle) * outerRadius);

		g.moveTo(endPt.x, endPt.y);

		if(!isNaN(fillColor))
			g.beginFill(fillColor);
		else
			f.begin(g,rc);

		GraphicsUtilities.setLineStyle(g, radialStroke);

		if (innerRadius == 0)
		{
			g.lineTo(origin.x, origin.y);
			g.lineTo(startPt.x, startPt.y);
		}
		else
		{
			var innerStart:Point = new Point(
				origin.x + Math.cos(startAngle + angle) * innerRadius,
				origin.y - Math.sin(startAngle + angle) * innerRadius);

			g.lineTo(innerStart.x, innerStart.y);			

			GraphicsUtilities.setLineStyle(g, stroke);
			GraphicsUtilities.drawArc(g, origin.x, origin.y,
									  startAngle + angle, -angle,
									  innerRadius, innerRadius, true);

			GraphicsUtilities.setLineStyle(g, radialStroke);
			g.lineTo(startPt.x, startPt.y);
		}

		GraphicsUtilities.setLineStyle(g, stroke);

		GraphicsUtilities.drawArc(g, origin.x, origin.y,
								  startAngle, angle,
								  outerRadius, outerRadius, true);

		g.endFill();
	}
}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -