2

選択したオブジェクト ( Display Object 、UIComponent または Group ) の塗りつぶしプロパティ(* Color and Gradient *)を設計したいと考えています。色のインターフェイスを設計しましたが、塗りつぶしの色でしか機能しません。塗りつぶしの色と塗りつぶしのグラデーションを同時に設計して、ユーザーが自分の要件に応じて色またはグラデーションを塗りつぶすことができるようにする方法。

単一のオブジェクト コードは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           implements="sharedData.IObjectProperty"
           xmlns:mx="library://ns.adobe.com/flex/mx" width="120" height="70">



<fx:Script>
    <![CDATA[
        import mx.events.FlexEvent;
        import mx.graphics.GradientEntry;
        import mx.graphics.LinearGradient;
        import mx.graphics.SolidColor;


        private var _color:uint = 0xFFFFFF;
        private var _alpha:uint=1;

        private var _strokeColor:uint = 0x000000;
        private var _strokeAlpha:uint = 1;
        private var _strokeWeight:uint =1;


        [Bindable]
        public function get strokeColor():uint
        {
            return _strokeColor;

        }

        public function set strokeColor(Color:uint):void
        {
            _strokeColor = Color;

        }

        [Bindable]
        public function get strokeAlpha():uint
        {
            return _strokeAlpha;

        }
        public  function set strokeAlpha(Size:uint):void
        {
            _strokeAlpha = Size;
        }
        [Bindable]
        public function get strokeWeight():uint
        {

            return _strokeWeight;
        }
        public function set strokeWeight(Weight:uint):void
        {
            _strokeWeight = Weight;
        }

        /*property for color and alpha*/

        [Bindable]
        public function get ObjColor():uint
        {
            return _color;

        }
        public function set ObjColor(ColorObj:uint):void
        {
            _color = ColorObj;
        }

        [Bindable]
        public function get ObjAlpha():uint
        {
            return _alpha;

        }
        public function set ObjAlpha(AlphaObj:uint):void
        {  
            _alpha = AlphaObj;

        }



    ]]>
</fx:Script>


    <!--s:Path width="100%" height="100%" data="M 10 0 L 120 0 L 110 10 L 0 10 L 10 0 M 110 10 L 110 70 L 0 70 L 0 10 M 120 0 L 120 60 L 110 70">
        <s:stroke>
            <s:SolidColorStroke color="#000033" alpha="1" 
                                weight="1" pixelHinting="true"/>
        </s:stroke>
        <s:fill>
            <s:SolidColor color="#FFFFFF" alpha="0.5"/>
        </s:fill>
    </s:Path-->

    <s:Path  width="100%" height="100%" data="M 10 0 L 130 0 L 120 10 L 0 10 L 10 0 M 0 10 L 0 70 L 120 70 L 120 10 M 120 70 L 130 60 L 130 0 L 120 10" id="iface">

        <s:stroke>
            <s:SolidColorStroke alpha="{strokeAlpha}" color="{strokeColor}" weight="{strokeWeight}"/>

        </s:stroke>

        <s:fill>
            <s:SolidColor alpha="{ObjAlpha}" color="{ObjColor}">

            </s:SolidColor>

        </s:fill>



    </s:Path>

    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
</s:Group>
`
4

1 に答える 1

1

私がこれを正しく読んでいると仮定すると、2 つの方法のいずれかで実行できます。

1) タグ内で塗りつぶしオブジェクトを作成しfx:Declarations、AS3 内で手動で設定できます。

<fx:Declarations>
    <s:SolidColor id="solid" />
    <s:LinearGradient id="grad" />
</fx:Declarations>  
<fx:Script>
    <![CDATA[
        if ( this ) {
            this.graphicsObjects.fill = solid;
        }
        else if ( that ) {
            this.graphicsObjects.fill = grad;
        }
    ]]>
</fx:Script>

2) 状態を使用できます。これは、このようなアクションのための私の好みの方法です。

<fx:Declarations>
    <s:SolidColor id="solid" />
    <s:LinearGradient id="grad" />
</fx:Declarations>
<s:states>
    <s:State name="solidFill"/> <!-- Will default to the first state in the array -->
    <s:State name="gradFill"/>
</s:States>
<s:Rect fill.solidFill="{this.solid}" fill.gradFill="{this.grad}"/>
<fx:Script>
    <![CDATA[
             this.currentState = "solidFill";
             this.currentState = "gradFill";
    ]]>
</fx:Script>

まだわからない場合は、States を使用すると、オブジェクトが特定のポイント (「状態」) でどのように見えるか、および/またはどのように動作するかを定義できます。currentStateを「gradFill」に設定すると、MXMLfill.gradFillRectオブジェクトに使用することを認識します。これは単純で、内部メカニズムでスワッピングを処理できます。追加の利点として、Transitions も利用でき (LiveDocs を参照)、各状態で複数のオブジェクトを変更することもできます。

どちらの方法でも機能するため、実際にどのように処理するかはあなた次第です。

于 2013-01-08T16:26:16.377 に答える