0

ここでDegrafa初心者:-)。

「com.degrafa.skins.CSSSkin」を取得して、線形グラデーションの背景を作成することができました。今、私は放射状のグラデーションを理解しようとしているので、より高度なものに取り組んでいます...

Flex-skinning-with-degrafa-screencastを見てこれを理解しましたが、コードが機能せず、キャンバスに白い背景が表示されます。

これが私がこれまでに持っているコードです:

Canvasを拡張し、ThreeWayGradientのstyleNameを持つMXMLコンポーネントThreeWayGrad.mxmlがあります。

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    styleName="ThreeWayGradient"/> 

クラスRadialGradientのスキンタグを持つThreeWayGradientのCSSスタイルエントリがあります。

Canvas.ThreeWayGradient 
{
    borderSkin: ClassReference("assets.skins.RadialGradient");
}

そして最後に、RadialGradient.mxmlコンポーネントがあります。

<?xml version="1.0" encoding="utf-8"?>
<GraphicBorderSkin
 xmlns:mx="http://www.adobe.com/2006/mxml"
    xmlns="http://www.degrafa.com/2007"> 

    <mx:Script>
        <![CDATA[
            [Bindable] private var _height:Number = 0;
            [Bindable] private var _width:Number = 0;

            override protected 
                function updateDisplayList(w:Number, h:Number):void 
            {
                super.updateDisplayList(w, h);
                _height = h; 
                _width  = w;
                trace("INFO: displaylist updated --" + _height + " : " + _width );
            }
        ]]>
    </mx:Script>
     <strokes>
         <SolidStroke id="mainStroke" color="#333333" weight="3"/>
     </strokes>
        <fills>
            <RadialGradientFill    
             id="blueGradient"
             angle="45"
             focalPointRatio="0">
                <GradientStop 
                 alpha="1"
                    ratio=".25"
                    color="#ffffff"/> 
                <GradientStop 
                 alpha="1"
                    ratio=".70"
                    color="#003355"/>
                <GradientStop 
                    alpha="1"
                    ratio="1"
                    color="#111111"/>
            </RadialGradientFill>
        </fills>
        <!-- Creating the background -->
        <geometry>
         <GeometryComposition>
             <!-- Creating a Rectangle to draw the gradient to and 
             moving the center of the gradient to the lower left corner -->
             <RegularRectangle  
              fill="{blueGradient}" 
              stroke="{mainStroke}"
                 height="{_height}"
                 width="{_width}" 
                 />
         </GeometryComposition> 
        </geometry>
</GraphicBorderSkin>

なぜこれが機能しないのか誰かが知っていますか?正しいサイズのトレース出力が表示されるので、クラスが呼び出されていることがわかります。

また、GraphicBorderSkin要素の代わりにSurfaceを使用し、GeometryCompositionの代わりにGeometryGroupを使用して、このコードを新しいアプリケーションにコピーしました。これで機能します。とにかく、私は何か簡単なものが欠けていると確信しています、そして事前に感謝します!!!

4

1 に答える 1

1

次のようなスキンコードを使用できるはずです(skinWidthとskinHeightはGraphicBorderSkin内で公開されるため、updateDisplayListをオーバーライドして、幅と高さの追加のローカル変数を指定する必要はありません)。

<?xml version="1.0" encoding="utf-8"?>
<GraphicBorderSkin
 xmlns:mx="http://www.adobe.com/2006/mxml"
    xmlns="http://www.degrafa.com/2007"> 

     <strokes>
         <SolidStroke id="mainStroke" color="#333333" weight="3"/>
     </strokes>
        <fills>
            <RadialGradientFill    
             id="blueGradient"
             angle="0"
             focalPointRatio="0">
                <GradientStop 
                 alpha="1"
                    ratio=".25"
                    color="#ffffff"/> 
                <GradientStop 
                 alpha="1"
                    ratio=".70"
                    color="#003355"/>
                <GradientStop 
                    alpha="1"
                    ratio="1"
                    color="#111111"/>
            </RadialGradientFill>
        </fills>
        <!-- Creating the background -->
        <geometry>
        <!-- Creating a Rectangle to draw the gradient to and 
             moving the center of the gradient to the lower left corner -->
             <RegularRectangle  id="rect"
              fill="{blueGradient}" 
              stroke="{mainStroke}"
              height="{skinHeight}"
                 width="{skinWidth}" 
                 />
                 <!-- Alernative:   <RegularRectangle fill="{blueGradient}" stroke="{mainStroke}" height="100%" width="100%"/> -->
        </geometry>
</GraphicBorderSkin>

この場合、RegularRectangleを囲むGeometryCompositionは必要ありません。また、これについてJason Hawryluk(Degrafaアーキテクト)と話し合い、Geometryのレイアウトサポートを介して指定する別の方法を指摘しました。レイアウト主導の例については、コメント付きのマークアップ「Alternative」を参照してください。

また、キャンバスの場合、描画する幅と高さの設定を指定する必要があります。

<mx:Canvas 
    xmlns:mx="http://www.adobe.com/2006/mxml" width="50%" height="50%"
    styleName="ThreeWayGradient"/>
于 2009-09-21T22:32:14.130 に答える