Honestly flash’s default Gradient API is kind of crap. Therefore I made alternative methods that enables you define gradient easily. Instead of nasty gradient box matrix, my api use more human friendly parameter, Point and Number specified radius. So you can easily create gradient as if you use flash IDE.

//API for Linear Gradient Fill
beginLinearGradientFill([0x000000,0xfffffff],[1,1],[0,255], startPoint:Point, endPoint:Point);

//API for Radial Gradient Fill
beginRadialGradientFill([0x000000,0xffffff],[1.0,1.0],[0,255], centerPoint:Point, radius:Number);

Below is snipets.

public function beginRadialGradientFill(	colors:Array,
	alphas:Array,
	ratios:Array,
	centerPoint:Point,
	radius:Number,
	spreadMethod:String="pad",
	interpolationMethod:String="rgb"):void{

	var mat:Matrix = new Matrix();
	mat.createGradientBox(radius*2,radius*2,0,centerPoint.x-radius,centerPoint.y-radius);
	graphics.beginGradientFill(GradientType.RADIAL, colors, alphas, ratios, mat, spreadMethod, interpolationMethod)
}

public function beginLinearGradientFill(	colors:Array,
	alphas:Array,
	ratios:Array,
	startPoint:Point,
	endPoint:Point,
	spreadMethod:String="pad",
	interpolationMethod:String="rgb"):void{
var dx:Number = endPoint.x-startPoint.x;
var dy:Number = endPoint.y-startPoint.y;
var dist:Number = Math.sqrt(dx*dx+dy*dy);
var rad:Number = Math.atan2(dy,dx);
var offsetX:Number = -(dist - Math.cos(rad)*dist)*0.5 + startPoint.x;
var offsetY:Number = -(dist - Math.sin(rad)*dist)*0.5 + startPoint.y;

var mat:Matrix = new Matrix();
mat.createGradientBox(dist,dist,rad,offsetX,offsetY);
graphics.beginGradientFill(GradientType.LINEAR, colors, alphas, ratios, mat, spreadMethod, interpolationMethod)
}

Follow me on Twitter