Flex容器背景重绘实现渐变效果
定义类:
package LDY
{
import flash.display.*;
import flash.geom.Matrix;
import flash.utils.*;
import mx.containers.Canvas;
import mx.core.EdgeMetrics;
import mx.skins.halo.HaloBorder;
public class ComponentGradientBorder extends HaloBorder
{
private var topCornerRadius:Number;
private var bottomCornerRadius:Number;
private var fillColors:Array;
private var setup:Boolean;
//设置样式
private function setupStyles():void{
if((this.parent as Canvas) !=null){
var str:String=(this.parent as Canvas).getStyle("fillColors");
fillColors=str.split(",");
}
else{
fillColors=getStyle("fillColors") as Array;
}
if(!fillColors) fillColors=[6BB4DA, ffffff];
topCornerRadius=getStyle("cornerRadius") as Number;
if(!topCornerRadius) topCornerRadius=0;
bottomCornerRadius=getStyle("bottomCornerRadius") as Number;
if(!bottomCornerRadius) bottomCornerRadius=topCornerRadius;
}
//重绘背景
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
super.updateDisplayList(unscaledWidth,unscaledHeight);
setupStyles();
var g:Graphics=graphics;
var b:EdgeMetrics=borderMetrics;
var w:Number=unscaledWidth-b.left-b.right;
var h:Number=unscaledHeight-b.top-b.bottom;
var m:Matrix=verticalGradientMatrix(0,0,w,h);
g.beginGradientFill("linear", fillColors,[1, 1], [0, 255], m);
var tr:Number = Math.max(topCornerRadius-2, 0);
var br:Number = Math.max(bottomCornerRadius-2, 0);
GraphicsUtil.drawRoundRectComplex(g, b.left, b.top, w, h, tr, tr, br, br);
g.endFill();
}
}
}

浙公网安备 33010602011771号