椭圆形按钮的代码

//****************************************************************************
//                       ______
//                    .-"      "-.
//                   /    AOL     /
//                  |              |
//                  |,  .-.  .-.  ,|
//                  | )(__/  /__)( |
//                  |/     //     /|
//        (@_       (_     ^^     _)
//   _     ) /_______/__|IIIIII|__/__________________________
//  (_)@8@8{}<________|-/IIIIII/-|___________________________>
//         )_/        /          /
//        (@           `--------`			AOL FLASH STUDIO.
//****************************************************************************
// @FileName OvalButtonSkin.as
// @Package
// @Description 椭圆按钮皮肤
// @Author aol
// @Email jeremy1982@21cn.com
// @Create 2004.08.27
// @LastChange 2004.08.27
// @History
//****************************************************************************

import mx.skins.RectBorder;
import mx.skins.SkinElement;
import mx.core.ext.UIObjectExtensions;

class OvalButtonSkin extends RectBorder
{
        /**
        @private
        * SymbolName for object
        */
        static var symbolName:String = "OvalButtonSkin";
        /**
        @private
        * Class used in createClassObject
        */
        static var symbolOwner:Object = OvalButtonSkin;
        
        /**
        * name of this class
        */
        var className = "OvalButtonSkin";
        
        var backgroundColorName = "buttonColor";
        
        //var drawOval:Function;
        
        function OvalButtonSkin()
        {
        }
        
        function init():Void
        {
                super.init();
        }
        
        function size():Void
        {
                drawHaloRect(width,height);
        }
        
        function drawHaloRect(w:Number,h:Number):Void
        {
                var borderStyle = getStyle("borderStyle");
                var themeCol = getStyle("themeColor");
                var emph:Boolean = _parent.emphasized;
                clear();
                switch (borderStyle)
                {
                        case "falseup":
                        if (emph)
                        {
                                drawOval( x,y,w,h,0x919999,100);//OuterBorder
                                drawOval( x,y,w,h,themeCol,75);//OuterBorder
                                drawOval( x+1,y+1,w-2,h-2,[0x333333,0xffffff],85,0,"radial");
                                drawOval( x+2,y+2,w-4,h-4,[0x000000,0xdadada],100,0,"radial");
                                drawOval( x+2,y+2,w-4,h-4,themeCol,75);
                                drawOval( x+3,y+3,w-6,h-6,0xffffff,100);//highlight
                                drawOval( x+3,y+4,w-6,h-7,0xf8f8f8,100);//face
                        }
                        else
                        {
                                drawOval( 0,0,w,h,0x919999,100);//OuterBorder
                                drawOval( 1,1,w-2,h-2,[0xcad1d1,0xf7f7f7],100,0,"radial");
                                drawOval( 2,2,w-4,h-4,[0x919999,0xd2dada],100,0,"radial");
                                drawOval( 3,3,w-6,h-6,0xffffff,100);//highlight
                                drawOval( 4,4,w-6,h-7,0xf8f8f8,100);//face
                        }
                        break;
                        case "falsedown":
                        drawOval( x,y,w,h,0x919999,100);//OuterBorder
                        drawOval( x+1,y+1,w-2,h-2,[0x333333,0xfcfcfc],100,0,"radial");
                        drawOval( x+1,y+1,w-2,h-2,themeCol,50);
                        drawOval( x+2,y+2,w-4,h-4,[0x000000,0xdadada],100,0,"radial");
                        drawOval( x,y,w,h,themeCol,40);//OuterBorder
                        drawOval( x+3,y+3,w-6,h-6,0xffffff,100);//highlight
                        drawOval( x+3,y+4,w-6,h-7,themeCol,20);//face
                        break;
                        case "falserollover":
                        drawOval( x,y,w,h,0x919999,100);//OuterBorder
                        drawOval( x,y,w,h,themeCol,50);//OuterBorder
                        drawOval( x+1,y+1,w-2,h-2,[0x333333,0xffffff],100,0,"radial");
                        drawOval( x+2,y+2,w-4,h-4,[0x000000,0xdadada],100,0,"radial");
                        drawOval( x+2,y+2,w-4,h-4,themeCol,50);
                        drawOval( x+3,y+3,w-6,h-6,0xffffff,100);//highlight
                        drawOval( x+3,y+4,w-6,h-7,0xf8f8f8,100);//face
                        break;
                        case "falsedisabled":
                        drawOval( 0,0,w,h,0xc8cccc,100);//OuterBorder
                        drawOval( 1,1,w-2,h-2,0xf2f2f2,100);
                        drawOval( 2,2,w-4,h-4,0xd4d9d9,100);
                        drawOval( 3,3,w-6,h-6,0xf2f2f2,100);//face
                        break;
                        case "trueup":
                        drawOval( x,y,w,h,0x999999,100);//OuterBorder
                        drawOval( x+1,y+1,w-2,h-2,[0x333333,0xfcfcfc],100,0,"radial");
                        drawOval( x+1,y+1,w-2,h-2,themeCol,50);
                        drawOval( x+2,y+2,w-4,h-4,[0x000000,0xdadada],100,0,"radial");
                        drawOval( x,y,w,h,themeCol,40);//OuterBorder
                        drawOval( x+3,y+3,w-6,h-6,0xffffff,100);//highlight
                        drawOval( x+3,y+4,w-6,h-7,0xf7f7f7,100);//face
                        break;
                        case "truedown":
                        drawOval( x,y,w,h,0x999999,100);//OuterBorder
                        drawOval( x+1,y+1,w-2,h-2,[0x333333,0xfcfcfc],100,0,"radial");
                        drawOval( x+1,y+1,w-2,h-2,themeCol,50);
                        drawOval( x+2,y+2,w-4,h-4,[0x000000,0xdadada],100,0,"radial");
                        drawOval( x,y,w,h,themeCol,40);//OuterBorder
                        drawOval( x+3,y+3,w-6,h-6,0xffffff,100);//highlight
                        drawOval( x+3,y+4,w-6,h-7,themeCol,20);//face
                        break;
                        case "truerollover":
                        drawOval( x,y,w,h,0x919999,100);//OuterBorder
                        drawOval( x,y,w,h,themeCol,50);//OuterBorder
                        drawOval( x+1,y+1,w-2,h-2,[0x333333,0xffffff],100,0,"radial");
                        drawOval( x+1,y+1,w-2,h-2,themeCol,40);
                        drawOval(x+2,y+2,w-4,h-4,[0x000000,0xdadada],100,0,"radial");
                        drawOval( x+2,y+2,w-4,h-4,themeCol,40);
                        drawOval( x+3,y+3,w-6,h-6,0xffffff,100);//highlight
                        drawOval( x+3,y+4,w-6,h-7,0xf8f8f8,100);//face
                        break;
                        case "truedisabled":
                        drawOval( 0,0,w,h,0xc8cccc,100);//OuterBorder
                        drawOval( 1,1,w-2,h-2,0xf2f2f2,100);
                        drawOval( 2,2,w-4,h-4,0xd4d9d9,100);
                        drawOval( 3,3,w-6,h-6,0xf2f2f2,100);//face
                }
        }
        
        
        
        function drawOval(x0:Number, y0:Number, w:Number, h:Number,c,alpha:Number,rot:Number,grad:String)
        {
                var radius = w/2;
                var yRadius = h/2;
                var x = x0+radius;
                var y = y0+yRadius;
                if (arguments.length < 3)
                {
                        return;
                }
                if(typeof c == "object"){
                        var alphas = [alpha,alpha];
                        var ratios = [ 0, 0xff ];
                        var sh = h *.7
                        
                        var matrix = {matrixType:"box", x:-sh, y:sh, w:w*2, h:h*4, r:rot * 0.0174532925199433 }
                        if (grad == "radial"){
                                this.beginGradientFill( "radial", c, alphas, ratios, matrix );
                        }else{
                                this.beginGradientFill( "linear", c, alphas, ratios, matrix );
                        }
                }else if (c != undefined) {
                        this.beginFill (c, alpha);
                }
                
                
                
                // init variables
                var theta:Number, xrCtrl:Number, yrCtrl:Number, angle:Number, angleMid:Number;
                var px:Number, py:Number, cx:Number, cy:Number;
                // if only yRadius is undefined, yRadius = radius
                if (yRadius == undefined)
                {
                        yRadius = radius;
                }
                // covert 45 degrees to radians for our calculations
                theta = Math.PI / 4;
                // calculate the distance for the control point
                xrCtrl = radius / Math.cos(theta / 2);
                yrCtrl = yRadius / Math.cos(theta / 2);
                // start on the right side of the circle
                angle = 0;
                this.moveTo(x + radius, y);
                // this loop draws the circle in 8 segments
                for (var i = 0; i < 8; i++)
                {
                        // increment our angles
                        angle += theta;
                        angleMid = angle - (theta / 2);
                        // calculate our control point
                        cx = x + Math.cos(angleMid) * xrCtrl;
                        cy = y + Math.sin(angleMid) * yrCtrl;
                        // calculate our end point
                        px = x + Math.cos(angle) * radius;
                        py = y + Math.sin(angle) * yRadius;
                        // draw the circle segment
                        this.curveTo(cx, cy, px, py);
                }
                
                
                if (c != undefined)
                this.endFill();
        };
        
        static function classConstruct():Boolean
        {
                UIObjectExtensions.Extensions();
                _global.skinRegistry["OvalButtonSkin"] = true;
                return true;
        }
        static var classConstructed:Boolean = classConstruct();
        static var UIObjectExtensionsDependency = UIObjectExtensions;
}

    这里有一个缺点,就是一旦改变了组件的主题,就不能在同一个fla文件中使用另外一种主题的组件.因为它们是由
一个全局变量来控制.目前我只能用setStyle()和另做一个组件来使它们能够共存.macromedia在整体的组件设计上
是有很多缺陷的,不光在这里.在基类的设计上,还有事件模型的设计上都有一些重大的缺陷.有时间自己用MVC模式设计一套吧.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值