Проблема с размером DrawRoundRect - PullRequest
0 голосов
/ 01 августа 2011

Я пытаюсь создать пользовательскую кнопку с помощью ActionScript 3.0. Я использую круглый прямоугольник в качестве фона, но у меня проблема с размером.

Это мой пользовательский класс кнопок:

package
{
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.display.Shape;

    public class customButton extends Sprite
    {
        private var background:Shape;
        public var bgColor:uint;
        public var borderColor:uint;
        public var borderSize:uint;
        public var cornerRadius:uint;
        private var label:TextField;

        public function customButton(text:String)
        {
            super();

            this.opaqueBackground = 0xFF0000;

            background = new Shape();
            borderSize = 1;
            borderColor = 0x666666;
            bgColor = 0xFFCC00;
            cornerRadius = 9;

            label = new TextField();
            label.text = text;

            var format:TextFormat = new TextFormat();
            format.font = "Verdana";
            format.color = 0;
            format.size = 38;
            format.underline = true;

            label.defaultTextFormat = format;

            addChild(background);
            addChild(label);

            buttonMode = true;
            mouseChildren = false;
        }

        public function draw():void
        {
            background.graphics.lineStyle(borderSize, borderColor);
            background.graphics.beginFill(bgColor);
            background.graphics.drawRoundRect(0, 0, this.width, this.height cornerRadius);
            background.graphics.endFill();
        }
    }
}

А вот код, используемый для отображения кнопки:

    public function Test01()
    {
        super();

        // support autoOrients
        stage.align = StageAlign.TOP_LEFT;
        stage.scaleMode = StageScaleMode.NO_SCALE;

        button = new customButton("Button");
        button.x = 200;
        button.y = 300;
        button.width = 200;
        button.height = 100;
        button.draw();

        addChild(button);
    }

Если я установлю этот размер на кнопку:

button.width = 200;
button.height = 100;

Я получаю следующее:

enter image description here

Но я установил размер кнопки:

button.width = 40; button.height = 20;

(Этот размер такой же, как в классе customButton). Я получаю:

enter image description here

Я не знаю, почему, когда я использую размер (40, 20), я получаю прямоугольник меньшего размера, чем этот размер.

Любой совет?

Ответы [ 3 ]

1 голос
/ 01 августа 2011

это происходит потому, что вы устанавливаете ширину непосредственно на Sprite, она изменяет размер спрайта, а не размер фона, который вы рисуете.

в вашем классе customButton добавьте код:

private var _width:Number = 10;
private var _height:Number = 10;

override public function get width():Number { return _width; }      
override public function set width(value:Number):void 
{
    _width = value;
    draw ();
}

override public function get height():Number { return _height; }        
override public function set height(value:Number):void 
{
    _height = value;
    draw ();
}

private function draw():void
{
    background.graphics.clear ()
    background.graphics.lineStyle(borderSize, borderColor);
    background.graphics.beginFill(bgColor);
    background.graphics.drawRoundRect(0, 0, _width, _height, cornerRadius);
    background.graphics.endFill();
}

с помощью этого кода вы сможете каждый раз изменять размер фона и не будете влиять на другие компоненты.

0 голосов
/ 01 августа 2011

Размер вашего класса roundRect был исправлен, поэтому он не вносил изменений при увеличении ширины.

Создайте два открытых параметра для ширины (Bwidth) и высоты (Bheight) и получите к ним доступ.

подобно

button.Bwidth = 100;
0 голосов
/ 01 августа 2011
package
{
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.display.Shape;

    public class customButton extends Sprite
    {
        private var background:Shape;
        public var bgColor:uint;
        public var borderColor:uint;
        public var borderSize:uint;
        public var cornerRadius:uint;
        public var bWidth:Number;
        public var bHeight:Number;
        private var label:TextField;

        public function customButton(text:String, bW:Number, bH:Number)
        {
            super();
            this.bWidth = bW;
            this.bHeight = bH;

            background = new Shape();
            borderSize = 1;
            borderColor = 0x666666;
            bgColor = 0xFFCC00;
            cornerRadius = 9;

            label = new TextField();
            label.text = text;

            var format:TextFormat = new TextFormat();
            format.font = "Verdana";
            format.color = 0;
            format.size = 38;
            format.underline = true;

            label.defaultTextFormat = format;

            addChild(background);
            addChild(label);

            buttonMode = true;
            mouseChildren = false;
            background.graphics.lineStyle(borderSize, borderColor);
            background.graphics.beginFill(bgColor);
            background.graphics.drawRoundRect(0, 0, bWidth, bHeight, cornerRadius);
            background.graphics.endFill();
        }

    }
}

ПОПРОБУЙТЕ

...