0

まず、私は肌を持っていますImageButtonSkin.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:mx="library://ns.adobe.com/flex/mx">
    <!-- host component -->
    <fx:Metadata>
        [HostComponent("spark.components.Button")]
    </fx:Metadata>

    <!-- states -->
    <s:states>
        <s:State name="disabled" />
        <s:State name="down" />
        <s:State name="over" />
        <s:State name="up" />
    </s:states>

<!-- what should I use here????? BitmapImage might not be working for symbols from SWC lib -->
    <s:BitmapImage id="theImage"
             source.up="{getStyle('imageSkinUp')}"
             source.over="{getStyle('imageSkinOver')}"
             source.down="{getStyle('imageSkinDown')}"
             source.disabled="{getStyle('imageSkinDisabled')}" />

    <!-- SkinParts
    name=iconDisplay, type=spark.primitives.BitmapImage, required=false
    name=labelDisplay, type=spark.core.IDisplayText, required=false
    -->
</s:Skin>

それから私は持っていImageButton.asます:

package components
{
    import skins.ImageButtonSkin;

    import spark.components.Button;

    [Style(name="imageSkinUp", type="*")]
    [Style(name="imageSkinOver", type="*")]
    [Style(name="imageSkinDown", type="*")]
    [Style(name="imageSkinDisabled", type="*")]
    public class ImageButton extends Button
    {
        public function ImageButton()
        {
            super();
            setStyle("skinClass", ImageButtonSkin);
        }
    }
}

icons.swcまた、Flash CS5 からエクスポートされ、ビルド パスに追加されたファイルもあります。

最後に、私は私の中に次のものを持っていますTestProject.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:components="components.*">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

    <fx:Script>
        <![CDATA[
            [Bindable]
            private var playing:Boolean = false;
        ]]>
    </fx:Script>
    <s:Panel title="Test Project" width="400" height="300">
        <s:Button x="30" y="32" label="Button"
                  click="playing = !playing"
                  icon="{playing ? PLAY_ACTIVE : PLAY_ENABLED}" />

        <components:ImageButton x="19" y="96" label="ImageButton"
                                imageSkinUp="@Embed('assets/play.png')"
                                imageSkinOver="{PLAY_ACTIVE}"
                                imageSkinDown="{PLAY_ACTIVE}"
                                imageSkinDisabled="{PLAY_ACTIVE}" />
    </s:Panel>
</s:Application>

問題は、マウスを の上にImageButton置くPLAY_ACTIVEと、swc ファイルからシンボルをロードできないのに対し、Button.iconは を使用できることPLAY_ACTIVEです。

(注:状態に使用@Embed('assets/play.png')した場合、スタイリングは機能していimageSkinUpます)。

そこで、ButtonSkin に swc シンボルを使用できるかどうか尋ねています。ImageButtonSkin.mxmlもしそうなら、swcシンボルにどのコンテナを使用する必要がありs:BitmapImageますか?

4

2 に答える 2

0

私のコードが実際に機能していることがわかりました。シンボルが白いとは知らなかっPLAY_ACTIVEたので見ませんでした。

機能しない唯一のことは、シンボルに複数のフレームがある場合、ImageButton の最終結果は最初のフレームのみを表示でき、シンボル アニメーション (Flash のムービークリップ) を表示できないことです。

于 2012-12-18T21:07:50.277 に答える
0

問題はswcではありません。public 関数 styleChanged をオーバーライドし、invalidateDisplayList() を呼び出し、updateDisplayList もオーバーライドして、スタイルを更新します。それがどのように行われるかの完全な例については、このリンクを参照してください。

http://blogagic.com/98/styling-flex-custom-components

于 2012-12-15T02:37:31.270 に答える