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();
    }
  
 }
}

posted @ 2011-12-13 10:18  SFLDY  阅读(468)  评论(0)    收藏  举报