2010-10-20 20 views
0

J'ai un bouton d'étincelle avec des états haut, bas, over et disable dans un composant bouton pour créer un modulaire. Existe-t-il un moyen lorsque l'utilisateur appuie et maintenez une touche, le bouton restera dans l'état «bas»?garder l'état 'down' pour le bouton de la peau d'étincelle

Le composant bouton comprend skinClass:

<?xml version="1.0" encoding="utf-8"?> 
<s:Button xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    skinClass="wfm.keyBtn"> 
</s:Button> 

peau Spark:

<?xml version="1.0" encoding="utf-8"?> 
<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
<fx:Metadata> 
    [HostComponent("spark.components.Button")] 
</fx:Metadata> 
<s:states> 
    <s:State name="up"/> 
    <s:State name="over"/> 
    <s:State name="down"/> 
    <s:State name="disabled"/> 
</s:states> 
<s:Rect width="18" height="80" height.down="83" radiusX="1"> 
    <s:stroke> 
    <s:SolidColorStroke color="0xaaaaaa" weight="1"/> 
    </s:stroke> 
    <s:filters> 
    <s:BevelFilter 
    distance="0" 
    angle="5" angle.down="5" 
    highlightColor="0xbbbbbb" highlightColor.down="0xaaaaaa" 
    highlightAlpha="1" highlightAlpha.down="1" 
    shadowColor="0xaaaaaa" shadowColor.down="0xffffff" 
    shadowAlpha="1" shadowAlpha.down="1" 
    blurX="5" blurX.down="6" 
    blurY="5" blurY.down="6" 
    strength="2" strength.down="2" 
    type="inner" 
    /> 
    </s:filters> 
    <s:fill> 
    <s:LinearGradient rotation="90"> 
    <s:GradientEntry color="0xf3f3f3" color.down="0xfff963" /> 
    </s:LinearGradient> 
    </s:fill> 
</s:Rect> 
</s:SparkSkin> 
+0

Quand l'utilisateur appuie et tient 'Space' il est en down state jusqu'à ce que l'utilisateur libère 'Space'. Voulez-vous faire la même chose pour une autre touche? –

Répondre

1

Créer une sous-classe de bouton et dire la peau d'être dans l'état vers le bas chaque fois que la clé que vous aimez est en baisse . De plus, chaque fois que vous détectez la clé est vers le bas (ou plus bas), invalider l'état de la peau afin que la peau sait vérifier quel état il doit être:

package mypackage 
{ 
    import spark.components.Button; 

    public class MyButton extends Button 
    { 
     private var _isKeyDown:Boolean = false; 

     private function get isKeyDown():Boolean { 
      return _isKeyDown; 
     } 

     private function set isKeyDown(b:Boolean):void { 
      _isKeyDown = b; 
      this.invalidateSkinState(); 
     } 

     // Add handlers in here to set isKeyDown to true/false appropriately 

     override protected function getCurrentSkinState():String { 
      if (isKeyDown) 
       return "down"; 
      else 
       return super.getCurrentSkinState(); 
     } 
    } 
} 
+0

Comment puis-je dire à la peau d'être à l'état bas? Comment fusionner avec la peau étincelante? – JohnMax

+0

Peu importe, j'ai trouvé un moyen sans même avoir besoin d'étendre une classe autre que le composant de bouton. – JohnMax

+2

Eh bien, allez-vous partager votre solution? ;) –