2010-10-28 53 views
0

Mon but est de supprimer tous les retours de vol stationnaire de l'interface utilisateur. La motivation est de tester des prototypes d'interfaces tactiles et de ne pas laisser les utilisateurs avoir la file d'interactivité lorsque la souris plane sur ce qu'ils n'auront pas avec une interface tactile.Comment supprimer les effets hover/rollOver globalement sur les composants Spark?

avoir une solution partielle, mais il a deux problèmes:

  1. nécessite un gestionnaire d'événements sur chaque composant.
  2. Flickers en survol.

    protected function ui_suppressHover(event:MouseEvent):void 
        { 
         var b = event.currentTarget as UIComponent; 
         b.skin.currentState = "up"; 
        } 
    

    < s: Bouton x = "118" y = label = "Modifier em" click = "button1_clickHandler (event)" "60" rollOver = "button1_rollOverHandler (événement)" mouseOver = "ui_suppressHover (event) «/>

Répondre

1

Voici une solution partielle stimulée par la réponse de Maxim. Vous pouvez faire une classe HoverlessButton en étendant le bouton et en remplaçant comme si:

override protected function getCurrentSkinState():String 
{    
    var state:String = super.getCurrentSkinState(); 
    if (state == "over") 
     state = "up"; 
    return state; 
} 

Vous devez appeler les super impl d'abord parce qu'il est le seul qui peut vérifier correctement pour isDown(), qui est privé.

+0

Parfait! Et, si vous utilisez un ToggleButton, vous voudrez aussi faire '" overAndSelected "' soit '" upAndSelected "' et aussi vérifier 'focused == true' et mettre' state' à '" focus "'. – marcelebrate

2

Il est préférable de remplacer getCurrentSkinState, par exemple voir étincelle Button.as:

override protected function getCurrentSkinState():String 
{ 
    if (!enabled) 
     return "disabled"; 

    if (isDown()) 
     return "down"; 

    if (hovered || mouseCaptured) 
     return "over"; 

    return "up"; 
} 

Il suffit donc de retirer hovered || mouseCaptured "si".

+0

C'est utile, merci. Ca ne marche pas tout à fait car isDown() est privé. Je posterai une alternative comme une autre réponse. (J'ai essayé de mettre dans ce commentaire mais il perd tout le formatage.) Je suis toujours à la recherche d'une solution qui désactive globalement le survol au lieu de devoir créer des classes personnalisées héritant de chaque composant standard que je veux utiliser. – Turadg