Кнопка Skinning в Actionscript - Добавление границы - PullRequest
1 голос
/ 29 июля 2011

Я только начал играть со скинами, и мне все труднее, чем с чем-либо, с чем я сталкивался в Flex 4 Mobile . Это нужно сделать в ActionScript, так как я пытаюсь создать гибкую мобильную кнопку. Вот что у меня пока есть: (очень мало, меняет только цвет фона)

package skins {   
     import flash.display.GradientType;
     import flash.geom.Matrix;
     import mx.utils.ColorUtil;
     import spark.components.supportClasses.StyleableTextField;
     import spark.skins.mobile.ButtonSkin;
     import spark.skins.mobile.supportClasses.MobileSkin;

public class CustomButtonSkin extends ButtonSkin {

    public function CustomButtonSkin() {
        super();
        layoutPaddingLeft = 10;
        layoutPaddingRight = 10;
        layoutPaddingTop = 2;
        layoutPaddingBottom = 2;
        layoutCornerEllipseSize = 1;
    }

    private static var colorMatrix:Matrix = new Matrix();
    private static const CHROME_COLOR_ALPHAS:Array = [1, 1];
    private static const CHROME_COLOR_RATIOS:Array = [0, 127.5];        

    override protected function drawBackground(unscaledWidth:Number, unscaledHeight:Number):void {
        super.drawBackground(unscaledWidth, unscaledHeight);        

        var chromeColor:uint = getStyle("chromeColor");

        if (currentState == "up") {
        graphics.beginFill(0x1C1C1C);
        }           
        else{
        var colors:Array = [];
        colorMatrix.createGradientBox(unscaledWidth, unscaledHeight,                        Math.PI / 2, 0, 0);
        colors[0] = 0xFFFFFF;//ColorUtil.adjustBrightness2(chromeColor, 70);
        colors[1] = 0xEEEEEE;//chromeColor;    
        graphics.beginGradientFill(GradientType.RADIAL, colors, CHROME_COLOR_ALPHAS, CHROME_COLOR_RATIOS, colorMatrix);          
        graphics.endFill();
        }
    }

   }
}

Похоже, что документация для создания скинов мобильных компонентов Flex исключительно в ActionScript не так уж и сложна. Как мы можем добавить границу, например? Если бы кто-нибудь мог опубликовать свои собственные гибкие мобильные скины, это было бы очень признательно!

Ответы [ 2 ]

1 голос
/ 29 июля 2011

В частности, чтобы нарисовать границу, я бы нарисовал ее вручную с помощью графического API.

this.graphics.lineStyle(1, color, alpha, true); 
this.graphics.drawRect(0, 0, width, height);

У меня есть куча постов / подкастов в блоге о создании мобильных скинов / itemRenderers, которые могут вам помочь:

0 голосов
/ 28 ноября 2012

ButtonSkin имеет свойства upBorderSkin и downBorderSkin, которые вы бы установили равными графическим ресурсам fxg в конструкторе:

public function CustomButtonSkin()
{
     super();
     // your padding settings here

     upBorderSkin = path.to.fxg.resource.upBorder;
     downBorderSkin = path.to.fxg.resource.downBorder;
}

И вы переопределите drawBackground пустым телом, даже не super.drawBackground ():

override protected function drawBackground(unscaledWidth:Number, unscaledHeight:Number):void
{

}

Это так, что ваш пользовательский скин не будет рисовать фон по умолчанию.

Вам даже не нужно обнаруживать изменение состояния, чтобы нарисовать что-то другое.Указав свойства границы обложки, вы позволите родительскому классу ButtonSkin обнаружить изменения состояния и нарисовать соответствующий рисунок.

См. http://www.adobe.com/devnet/flex/articles/mobile-skinning-part1.html для получения дополнительной информации, особенно с использованием ресурсов fxg.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...