Как создать изображение Flex с прозрачной рамкой и закругленными углами? - PullRequest
1 голос
/ 21 марта 2012

У меня есть фотография в проекте Flex:

Image without transparent border and rounded corners

<s:Image source="@Embed('images/photo.png')" />

Но теперь мне интересно, смогу ли я сделать это изображение, как изображение ниже, во Flex (4 / 4.5 / 4.6) (в MXML и / или ActionScript 3 ) :

Image with transparent border and rounded corners

Возможно ли это?

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Вот учебник по во флеш-маске , который вы сможете портировать на Flex.

0 голосов
/ 03 апреля 2013

Да, это возможно, сначала вам нужно создать слой маски для углов круглого и внутренней тени, используя AI или PS

  1. Создайте маску в фотошопе или AI. Если вы используете PS, это должна быть векторная маска.
  2. Импортируйте его в Flash катализатор. Если вы используете PS, вы должны выбрать «Shape Layers> Keep Editable» в диалоге импорта.
  3. На панели слоев вы увидите группу с замаскированным содержимым внутри нее. Все, что входит в эту группу, будет замаскировано.
  4. Добавьте одно изображение в замаскированную группу и скопируйте замаскированный код в виде кода Flash катализатора. (ФК)

Теперь создайте один класс скина для изображения искры и добавьте код маски над изображением (BitmapImage).

MaskedImageSkin.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:fb="http://ns.adobe.com/flashbuilder/2009"
        alpha.disabled="0.5">

    <s:states>
        <s:State name="uninitialized" />
        <s:State name="loading"/>
        <s:State name="ready" />
        <s:State name="invalid" />
        <s:State name="disabled" />
    </s:states>

    <fx:Script fb:purpose="styling">
        <![CDATA[         
            /**
             *  @private
             */
            override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number) : void
            {
                // Push backgroundColor and backgroundAlpha directly.
                // Handle undefined backgroundColor by hiding the background object.
                if (isNaN(getStyle("backgroundColor")))
                {
                    background.visible = false;
                    background.includeInLayout = false;
                }
                else
                {
                    background.visible = true;
                    background.includeInLayout = true;
                    bgFill.color = getStyle("backgroundColor");
                    bgFill.alpha = getStyle("backgroundAlpha");
                }

                super.updateDisplayList(unscaledWidth, unscaledHeight);
            }
        ]]>        
    </fx:Script>

    <!-- host component -->
    <fx:Metadata>
        <![CDATA[ 
        /** 
        * @copy spark.skins.spark.ApplicationSkin#hostComponent
         */
        [HostComponent("spark.components.Image")]
        ]]>
    </fx:Metadata>

    <!--- Defines the appearance of the image background. -->
    <s:Rect id="background" left="0" right="0" top="0" bottom="0">
        <s:fill>
            <!-- @private -->
            <s:SolidColor id="bgFill"/>
        </s:fill>
    </s:Rect>

    <s:Group x="0" y="0">
        <s:filters>
            <s:DropShadowFilter color="#FFFFFF" inner="true" blurX="10" blurY="10" quality="5" alpha="0.85" angle="45" distance="10" />
            <s:DropShadowFilter color="#FFFFFF" inner="true" blurX="10" blurY="10" quality="5" alpha="0.85" angle="90" distance="10"/>
            <s:DropShadowFilter color="#FFFFFF" inner="true" blurX="10" blurY="10" quality="5" alpha="0.85" angle="-45" distance="10" />
            <s:DropShadowFilter color="#FFFFFF" inner="true" blurX="10" blurY="10" quality="5" alpha="0.85" angle="-90" distance="10"/>
        </s:filters>
        <s:mask>
            <s:Group x="0" y="0" width="280" height="180" >
                <s:Rect left="0" right="0" top="0" bottom="0" radiusX="10" radiusY="10">
                    <s:fill>
                        <s:SolidColor color="#FFFFFF"/>
                    </s:fill>
                </s:Rect>
            </s:Group>

        </s:mask>

        <!--- Primary image display skin part. -->
        <s:BitmapImage id="imageDisplay" left="0" top="0" right="0" bottom="0"/>

    </s:Group>




    <!--- Progress indicator skin part. -->
    <s:Range id="progressIndicator" skinClass="spark.skins.spark.ImageLoadingSkin" verticalCenter="0" horizontalCenter="0" includeIn="loading" layoutDirection="ltr" />

    <!--- Icon that appears in place of the image when an invalid image is loaded. -->
    <s:BitmapImage id="brokenImageIcon" includeIn="invalid" source="@Embed(source='Assets.swf',symbol='__brokenImage')" verticalCenter="0" horizontalCenter="0"/>

</s:Skin>

Применить этот класс скинов для изображения искры

<s:Image source="@Embed('assets/maskImg.png')" skinClass="MaskedImageSkin" width="200" height="200"/>

Приведенный выше код является лишь примером маскировки изображения, создайте свою собственную маску, используя скругленный прямоугольник. Это решит вашу проблему.

is it looks like what you want ?

Счастливая кожа ...

...