フレックス:HSlider - 異なる親指に異なるスキンを設定しますか?

StackOverflow https://stackoverflow.com/questions/1069457

  •  21-08-2019
  •  | 
  •  

質問

HSlider を使用して値の範囲を設定します。左手の親指はこんな感じにしたいです ( そして右手の親指は似ています ) したがって、次のような範囲を包含しているように見えます (範囲) の代わりに |範囲|. 。SliderThumbのスキンを設定する方法しか知りません。これにより、両方のスキンが設定されます。親指ごとに異なるスキンを設定する方法を知っている人はいますか?

ありがとう。

アップデート

私は今このコードを持っています:

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

    <mx:Style>
    .thumbTickLeft
    {
        disabledSkin: Embed(source="skins.swf", symbol="thumbTickLeft_disabledSkin");
        downSkin: Embed(source="skins.swf", symbol="thumbTickLeft_downSkin");
        overSkin: Embed(source="skins.swf", symbol="thumbTickLeft_overSkin");
        upSkin: Embed(source="skins.swf", symbol="thumbTickLeft_upSkin");
    }
    .thumbTickRight
    {
        disabledSkin: Embed(source="skins.swf", symbol="thumbTickRight_disabledSkin");
        downSkin: Embed(source="skins.swf", symbol="thumbTickRight_downSkin");
        overSkin: Embed(source="skins.swf", symbol="thumbTickRight_overSkin");
        upSkin: Embed(source="skins.swf", symbol="thumbTickRight_upSkin");
    }
    </mx:Style>

    <mx:Script>
        <![CDATA[
            override protected function commitProperties():void
            {
                super.commitProperties();

                updateThumbSkins();   
            }

            private function updateThumbSkins():void
            {
                this.getThumbAt(0).setStyle('styleName','thumbTickLeft');
                this.getThumbAt(1).setStyle('styleName','thumbTickRight');
            }
        ]]>
    </mx:Script>


</mx:HSlider>

親指のダニがまったく表示されないだけですか?ちなみに、スキンを次のようにボタンに設定できるため、スキンが正しく読み込まれていることを確認しました。

<mx:Button styleName="thumbTickRight"/>
役に立ちましたか?

解決

まあ、私はこの方法で動作させることができました。これが最良の方法かどうかはわかりません。

<?xml version="1.0" encoding="utf-8"?>
<mx:HSlider 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    sliderThumbClass="RangeSliderThumb" 
    creationComplete="initThumbs()">

    <mx:Script>
        <![CDATA[
            import mx.controls.sliderClasses.SliderThumb;

            [Embed(source="skins.swf", symbol="thumbTickLeft_upSkin")]
            private var leftUp:Class;

            [Embed(source="skins.swf", symbol="thumbTickRight_upSkin")]
            private var rightUp:Class;

            [Embed(source="skins.swf", symbol="thumbTickLeft_downSkin")]
            private var leftDown:Class;

            [Embed(source="skins.swf", symbol="thumbTickRight_downSkin")]
            private var rightDown:Class;

            [Embed(source="skins.swf", symbol="thumbTickLeft_overSkin")]
            private var leftOver:Class;

            [Embed(source="skins.swf", symbol="thumbTickRight_overSkin")]
            private var rightOver:Class;

            [Embed(source="skins.swf", symbol="thumbTickLeft_disabledSkin")]
            private var leftDisabled:Class;

            [Embed(source="skins.swf", symbol="thumbTickRight_disabledSkin")]
            private var rightDisabled:Class;

            private function initThumbs():void 
            {
                this.thumbCount = 2;

                var thumb1:SliderThumb = this.getThumbAt(0);
                thumb1.setStyle("thumbUpSkin", leftUp);
                thumb1.setStyle("thumbDownSkin", leftDown);
                thumb1.setStyle("thumbOverSkin", leftOver);
                thumb1.setStyle("thumbDisabledSkin", leftDisabled);

                var thumb2:SliderThumb = this.getThumbAt(1);
                thumb2.setStyle("thumbUpSkin", rightUp);
                thumb2.setStyle("thumbDownSkin", rightDown);
                thumb2.setStyle("thumbOverSkin", rightOver);
                thumb2.setStyle("thumbDisabledSkin", rightDisabled);
            }
        ]]>
    </mx:Script>

</mx:HSlider>

他のヒント

これをもう読まないかもしれませんが、私と同じように複数の親指を操作してそれぞれ異なるスキンを持たせようとして苦労している他の人たちのために、元のコードのどこが間違っているかを指摘しておきたいと思います。私はあなたの元のコード例に従いましたが、サムをレンダリングすることもできませんでした。その後、なぜあなたの最終的な解決策がうまくいったのかがわかりました。

問題は、元のコードではスタイル プロパティ upSkin、downSkin などを使用しているのに対し、機能するコードでは、thumbUpSkin、thumbDownSkin などを使用していることです。微妙な変化ですが、それが大きな違いを生みます!

これが将来的に誰かの命を救うのに役立つことを願っています...;-)

歓声が描かれました

これは、Slider クラス (または HSlider) をサブクラス化し、各親指に個別にスキンを適用するメソッドを追加することで実現できると思います。

Slider.asには、と呼ばれるメソッドがあります createThumbs. 。調べてみると、サムが作成されると、設定に基づいてそのスキンが割り当てられることがわかります。 thumbUpSkin, 、など。

thumb = SliderThumb(new _thumbClass());

thumb.owner = this;
thumb.styleName = new StyleProxy(this, thumbStyleFilters);
thumb.thumbIndex = i;
thumb.visible = true;
thumb.enabled = enabled;

thumb.upSkinName = "thumbUpSkin";
thumb.downSkinName = "thumbDownSkin";
thumb.disabledSkinName = "thumbDisabledSkin";
thumb.overSkinName = "thumbOverSkin";
thumb.skinName = "thumbSkin";

したがって、次のメソッドを作成できます。 skinThumbs で適用されるスキン設定をオーバーライドします。 createThumbs. 。電話することでそれぞれの親指を取得できます getThumbAt(int). 。スキン設定をオーバーライドする方法が必要な場合は、コメントを残してください。

私ならオーバーライドします commitProperties メソッドと呼び出し skinThumbs そこから - 必ず電話をかけるようにしてください skinThumbs 電話の後 super.commitProperties. 。ちなみに、 createThumbs メソッドはからのみ呼び出されます commitProperties, 、 の 1 つの場所からのみ呼び出されます。 commitProperties, したがって、変更が別の内部呼び出しによって置き換えられることを心配する必要はありません。 createThumbs.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top