椭圆形按钮的代码

原创 2004年09月06日 14:20:00
//****************************************************************************
//                       ______
//                    .-"      "-.
//                   /    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模式设计一套吧.

自定义Button形状(圆形、椭圆) shape

2011-09-19 08:36 30147人阅读 评论(0) 收藏 举报 转自:http://blog.csdn.net/xyylchq/article/details/6788761 ...
  • u010477502
  • u010477502
  • 2016年04月06日 17:32
  • 5895

css纯代码实现圆边框和圆按钮

一、CSS3圆角的优点 传统的圆角生成方案,必须使用多张图片作为背景图案。CSS3的出现,使得我们再也不必浪费时间去制作这些图片了,而且还有其他多个优点:   * 减少维护的工作量。图片文件的生成...
  • qq_25107499
  • qq_25107499
  • 2015年10月12日 10:45
  • 6310

bootstrap 圆形按钮

●html lg xl ●css body{margin:40px;} .btn-circle {   width: 30px;   height: 3...
  • jsjpanxiaoyu
  • jsjpanxiaoyu
  • 2017年03月07日 14:16
  • 4873

android - RadioButton椭圆形背景样式和字体选择时候的颜色

效果图: 上不是一个ToolBar可在文章中:Android 自带ToolBar自定义中间标题&分类  RadioButton布局: ...
  • u012246458
  • u012246458
  • 2016年07月07日 09:37
  • 1958

自定义圆角的ImageView 还可以实现图片的圆形、椭圆形展示。

为了达到美观的效果,项目中的所有图片显示都是圆角显示。然而Android的ImageView没有圆角属性,而让UI把所有图片都处理成圆角,也不合适。这里采用自定义的方法来自定义一个支持圆角的Image...
  • xq43701200
  • xq43701200
  • 2015年10月19日 11:54
  • 761

给定初边值条件的椭圆形方程数值解法

问题描述: matlab源代码: 1、fangcheng.m: % 注:1、运算时间可能稍微有些长, 请耐心等待! % 2、运算结果与精确解相当接近,需要多放大几次观察 %% 程序从这...
  • wsygddb
  • wsygddb
  • 2016年06月09日 01:50
  • 366

excel按钮vba代码发送邮箱带附件

  • 2018年01月16日 10:46
  • 106KB
  • 下载

mfc拖动按钮的例子代码

  • 2017年12月21日 20:26
  • 3.49MB
  • 下载

Java代码简单按钮

  • 2014年09月08日 14:07
  • 7KB
  • 下载

键盘按钮对应代码

  • 2013年06月30日 17:20
  • 5KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:椭圆形按钮的代码
举报原因:
原因补充:

(最多只允许输入30个字)