2010-10-19 51 views
0

Je me souviens d'utiliser le tableau de valeurs sur bon vieux mx: HSlider, existe-t-il une solution de contournement pour s: HSlider ?!Force Flex 4 Spark Hslider accrochage à certaines valeurs?

Fondamentalement, j'ai besoin de curseur pour choisir des valeurs entre 300 et 2500 dans les étapes suivantes 300,500,1000,2000,2500.

<s:HSlider id="franchiser" 
    value="1500" 
    skinClass="components.HorizontalSlider" x="0" y="0" 
    minimum="300" maximum="2500" /> 

Si ce n'est pas le cas, existe-t-il un autre curseur skinable ?!

Merci d'avance!

Répondre

2

Le HSlider par défaut n'a pas cette fonctionnalité. Pour ce faire, vous devez créer une classe qui étend HSlider et ajoute cette fonctionnalité.

Vous pouvez voir un exemple de la façon d'étendre une classe Flex ici: http://blog.flexexamples.com/2008/09/08/extending-the-linkbutton-control-in-flex/

+0

OMG, parfois je déteste vraiment Adobe :(Oui, j'avais un peu qui vient, mais J'espère qu'il y a une solution prouvée quelque part dans la communauté ... –

+0

Ouais, Adobe a déclaré que leur position était d'ajouter juste ce qui était nécessaire et ne pas ajouter de méthodes de commodité, donc vous devez le faire vous-même, malheureusement, bonne chance de trouver une autre solution. suppose que vous devrez l'écrire vous-même. –

2

Extend, et faites glisser le pouce ou suivre cliquez sur l'utilisation pointToValue

pour trouver votre valeur cliqué et rond le plus proche valeur que vous voulez que l'on accroche. C'est mieux que l'ancien comportement d'accrochage parce que vous pouvez faire des choses sympas comme l'accrochage logarithmique (par exemple, l'accrochage à 1,10,100,1000).

2

Voici une solution de base (qui pourrait facilement être mis dans une classe), pour ceux qui pourraient en avoir besoin:

<fx:Script> 
    <![CDATA[ 

    import mx.collections.ArrayCollection; 

    [Bindable] 
    private var sliderValues:ArrayCollection = 
     new ArrayCollection([300,500,1000,2000,2500]); 

    ]]> 
</fx:Script> 
... 
<s:HSlider id="sldr" 
    minimum="0" maximum="{sliderValues.length - 1}" 
    stepSize="1" snapInterval="1" 
    dataTipFormatFunction="{ 
    function():String 
    { 
     return sliderValues[sldr.value].toString(); 
    }}"/> 

<s:Label text="{sliderValues.getItemAt(sldr.value)}"/>