понедельник, 1 октября 2012 г.

AS 3.0 - простая кнопка

Создание кнопки при помощи графических средств Adobe Flash – это дело нескольких кликов, но когда мне понадобилось сделать тоже самое в чистом ActionScript, то я встал в тупик. Правда ненадолго.

Предлагаю вашему вниманию класс кнопки с текстом и, естественно, действием на клик.

package ui 
{
    import flash.display.Shape;
    import flash.display.SimpleButton;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.text.TextFieldAutoSize;
    import flash.events.MouseEvent;
 
    public class Button extends Sprite
    {
        private var button_obj : SimpleButton;
        private var _label : String;
        private var _width : uint   = 100;
        private var _height : uint  = 30;
 
        private var upColor : uint      = 0xC0C0C0;
        private var overColor : uint    = 0xE2E2E2;
        private var downColor : uint    = 0xFFFFFF;
 
        private var _handler : Function;
 
 
        public function set click(handler : Function) : void
        {
            _handler = handler;
            addEventListener(MouseEvent.CLICK, clickHandler);
        }
 
        private function clickHandler(e : MouseEvent) : void
        {
            _handler();
        }
 
        public function Button( width : uint = 0,
                                height : uint = 0,
                                label : String = '')
        {
            _label = label;
 
            if (width > 0)
                _width = width
 
            if (height > 0)
                _height = height
 
            button_obj = new SimpleButton;
 
            button_obj.downState =
                stateObject(downColor, _width, _height);
 
            button_obj.overState =
                stateObject(overColor, _width, _height);
 
            button_obj.upState =
                stateObject(upColor, _width, _height);
 
            button_obj.hitTestState =
                stateObject(upColor, _width, _height);
 
            button_obj.useHandCursor = true;
 
            addChild(button_obj);
 
            var text_label : TextField = createLabel();
 
            text_label.x = Math.round(width * 0.5
                        - text_label.width * 0.5);
 
            text_label.y = Math.round(height * 0.5
                        - text_label.height * 0.5);
 
            addChild(text_label);
        }
 
        private function stateObject(   color : uint,
                                        width : uint,
                                        height : uint) : Shape
        {
            var shape : Shape = new Shape;
 
            shape.graphics.beginFill(color);
            shape.graphics.drawRect(0, 0, width, height);
            shape.graphics.endFill();
 
            return shape;
        }
 
        private function createLabel() : TextField
        {
            var format : TextFormat =
                new TextFormat('_sans', 11);
 
            var text_label : TextField  = new TextField();
 
            text_label.selectable   = false;
            text_label.mouseEnabled = false;
            text_label.autoSize     = TextFieldAutoSize.LEFT;
            text_label.defaultTextFormat = format;
            text_label.text         = _label;
 
            return text_label;
        }
    }
}

По сути это класс SimpleButton, с присоединённым текстом, который выравнен по центру. Использовать его можно, например, так:
// button Hello
var butt_hello : Button = new Button(100, 30, 'Hello');
 
butt_hello.x = 10;
butt_hello.y = 210;
 
butt_hello.click = function () : void { trace('Hello!') };

Комментариев нет:

Отправить комментарий