0

これまで、無効にされたボタンのアイコンに対する私の解決策は、2番目のグレースケールアイコンを用意し、ボタンの有効な値に基づいてアイコンを交換することでした。明らかに、これは非常にハックです。

ボタンのアイコンにドリルダウンして、ボタンが無効になっているときに何らかのグレースケールフィルターを適用し、ボタンが再度有効になっているときにフィルターを削除したいと思います。私はいくつかのことを試しましたが、Flashグラフィックスについて十分に理解していないため、何をすべきかについて本当に良いアイデアがあります。

誰かが私にいくつかのポインタを与えることができますか?理想的には、Flex 3ソリューションが必要です(ほとんどのアプリはまだmx / sparkが混在しているため)が、Flex4でも問題ありません。

4

2 に答える 2

2

これはFlex3ソリューションです。

mx:Buttonそれ自体の中に子としてのアイコンがあります。updateDisplayList関数とセッターをオーバーライドenabledして、このアイコンを白黒にすることができます。

画像を白黒にするには、色のRGB値を平均化する必要があります。放送とテレビの公式は次のとおりです。

grey = R * 0.3 + b2 * 0.59 + b3 * 0.11

あなたの場合、アイコンでflash.filters.ColorMatrixFilterを使用できます。このフィルターは、ターゲットの色を変換します。フィルタの白黒マトリックス:

[ 0.3, 0.59, 0.11, 0,
  0.3, 0.59, 0.11, 0,
  0.3, 0.59, 0.11, 0,
  0,   0,    1,    0 ]

最後の列は、各色の加数を指定しているため、画像をより赤、より緑、セピアなどにすることができます。

フィルタは、次のように表示コンポーネントに適用されます。

var filter = Filter();
component.filters.push(filter); // doesn't work, and not because null pointer
component.filters = [filter];   // works

新しいフィルターを使用して配列を再割り当てすることが重要です。そうしないと、コンポーネントが配列を更新しません。

于 2011-09-10T07:22:07.783 に答える
1

肌を使って!flex 4では、スキンファイルを使用してこれをはるかに簡単にし、状態ごとのプロパティを配置できるようにしました。これはやや似ているものの1つで、基本的に状態とフィルターを使用して効果を変更します。

<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:fb="http://ns.adobe.com/flashbuilder/2009" width="28" height="28" xmlns:Common="UI.Common.*" xmlns:Controls="Core.Flex.Controls.*">
    <fx:Metadata>[HostComponent("Core.Flex.Controls.ToggleIcon")]</fx:Metadata>
    <s:states>
        <s:State name="up" />
        <s:State name="over" stateGroups="overStates" />
        <s:State name="down" stateGroups="downStates" />
        <s:State name="disabled" stateGroups="disabledStates" />
        <s:State name="upAndSelected" stateGroups="selectedStates, selectedUpStates" />
        <s:State name="overAndSelected" stateGroups="overStates, selectedStates" />
        <s:State name="downAndSelected" stateGroups="downStates, selectedStates" />
        <s:State name="disabledAndSelected" stateGroups="selectedUpStates, disabledStates, selectedStates" />
    </s:states>

    <s:Group left="2" right="2" top="2" bottom="2" useHandCursor="true" buttonMode="true">
        <Controls:ColorRect width="24" height="24" FillColor="#154b6b" StrokeColor="#FFFFFF" StrokeWeight=".1" alpha=".8" radiusX="6" radiusY="6" includeIn="up, disabled">
            <Controls:filters>
                <s:BevelFilter blurX="5" blurY="5" strength=".56" quality="3" distance="3"/>
            </Controls:filters>
        </Controls:ColorRect>

        <Controls:ColorRect width="24" height="24" FillColor="#1C648E" StrokeColor="#FFFFFF" StrokeWeight="2" radiusX="6" radiusY="6" includeIn="over">
            <Controls:filters>
                <s:BevelFilter blurX="5" blurY="5" strength=".87" quality="3" distance="3"/>
            </Controls:filters>
        </Controls:ColorRect>

        <Controls:ColorRect width="24" height="24" FillColor="#154b6b" StrokeColor="#FFFFFF" StrokeWeight=".1" radiusX="6" radiusY="6" includeIn="down, selectedStates">
            <Controls:filters>
                <s:BevelFilter blurX="5" blurY="5" strength=".1" quality="3" highlightColor="#000000" distance="3"/>
            </Controls:filters>
        </Controls:ColorRect>

        <s:BitmapImage source="{hostComponent.Icon}" left="2" top="2" right="2" bottom="2" alpha=".9" alpha.over="1" alpha.selectedStates="1"/>
    </s:Group>

</s:SparkSkin>
于 2011-09-10T01:00:12.307 に答える