自己画Menu borderSkin样式:

package com.wxxr.menu.as3
{
 import flash.display.GradientType;
 import flash.display.SpreadMethod;
 import flash.filters.DropShadowFilter;
 import flash.geom.Matrix;
 
 import mx.skins.halo.HaloBorder;
 
 public class MenuStyle extends HaloBorder
 {
  public function MenuStyle()
  {
   super();
  }  
  override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
  {
   super.updateDisplayList(unscaledWidth,unscaledHeight);
   var dropShadow:DropShadowFilter = new DropShadowFilter();
    dropShadow.color=0x000000; //设置投影
    dropShadow.alpha=0.25; //阴影颜色的 Alpha 透明度值。
    dropShadow.blurX=0; //水平模糊量。
    dropShadow.blurY=10; //重置模糊量
    dropShadow.angle=90; //阴影的角度。
    dropShadow.distance=4; //阴影的偏移距离,以像素为单位。
    filters=[dropShadow]; 
    
   var w:Number = this.width;
   var h:Number = this.height;
   var fillType:String = GradientType.LINEAR; //渐变类型--直线
   var color:Array = [0xE2E2E2,0xFFFFFF]; //渐变颜色
   var alphas:Array = [50,100]; //colors 数组中对应颜色的 alpha 值数组
   var ratios:Array = [0xE2, 0xFF];
   var matr:Matrix = new Matrix();
   matr.createGradientBox(22,22,0,0,0);
   var spreadMethod:String = SpreadMethod.PAD;
   graphics.beginGradientFill(fillType,color,alphas,ratios,matr,spreadMethod);
   graphics.drawRect(0,0,w,h);
   graphics.endFill();
  } 
 }
}

画Menu 中的分割线 separatorSkin:

package com.wxxr.menu.as3
{
 import flash.display.GradientType;
 import flash.display.SpreadMethod;
 import flash.geom.Matrix;
 
 import mx.skins.ProgrammaticSkin;
 
 public class SeparatroStyle extends ProgrammaticSkin
 {
  public function SeparatroStyle()
  {
   super();  
  }

  override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
  {
   super.updateDisplayList(unscaledWidth,unscaledHeight);
   var w:Number=this.width;
   var h:Number=1;
   var fillType:String = GradientType.LINEAR;
   var color:Array = [0xE2E2E2,0xC7C7C7];
   var alphas:Array = [100,100];
   var ratios:Array = [0xE2, 0xC7];
   var matr:Matrix = new Matrix();
   matr.createGradientBox(20,20,0,0,0);
   var spreadMethod:String = SpreadMethod.PAD;
   graphics.beginGradientFill(fillType,color,alphas,ratios,matr,spreadMethod);
   graphics.drawRect(0,0,w,h);
   graphics.endFill(); 
  }
 }
}

扩展MenuBar 应用Skin:

package com.wxxr.menu.as3
{
 import mx.controls.Menu;
 import mx.controls.MenuBar;
 
 public class MenuBarTest extends MenuBar
 {
  public function MenuBarTest()
  {
   super();
  }
  override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
  {
   super.updateDisplayList(unscaledWidth,unscaledHeight);
  }
        override public function getMenuAt(index:int) : Menu {
            var menu:Menu = super.getMenuAt(index);
   menu.setStyle("borderSkin",MenuStyle);
   menu.setStyle("separatorSkin",SeparatroStyle);
   menu.setStyle("rollOverColor",0x000000);
   menu.setStyle("textRollOverColor",0xFFFFFF);
      return menu;
        }         
 }
}

测试图:

 

posted on 2012-10-30 09:38  sagittar  阅读(279)  评论(0)    收藏  举报