2008-10-01 6 views
1

Juste que, si vous incorporez une icône:Flex: Modifier une icône intégrée et l'utiliser dans un bouton?

[Embed(source='icons/checkmark.png')] 
private static var CheckMark:Class; 

vous vous retrouvez avec une classe dynamique. Vous pouvez assez facilement assigner l'icône à un bouton à l'exécution en appelant la méthode setStyle:

var btn:Button = new Button(); 
btn.setStyle("icon", CheckMark); 

Mais si vous vouliez modifier l'icône lors de l'exécution, comme changer sa valeur alpha ou même pixels redessiner, avant de l'assigner au bouton?

Jusqu'à présent, je ne peux pas trouver une réponse satisfaisante ...

Répondre

2

C'est la seule réponse que je pouvais trouver qui semblait proche: Dynamic Icons(example with View Source)

Sa solution implique une classe personnalisée « de DynamicIcon » qui est utilisé dans le paramètre d'icône du bouton, et une classe Button personnalisée qui ajoute une méthode à la classe Button pour dessiner des icônes dynamiques. Le résultat final est que vous pouvez envoyer BitmapData à la classe DynamicIcon, qui apparaîtra dans le bouton. Alors, incorporez votre image, instanciez votre classe d'actifs, récupérez le bitmapasset et modifiez-le comme vous le souhaitez et envoyez le bitmapData à l'icône.

C'est un problème intéressant et il semble qu'il devrait y avoir une solution plus facile, mais cela fonctionne sans beaucoup de tracas.

0

La façon dont j'aurais résolu ceci est d'implémenter une classe d'habillage programmatique qui dessine l'icône elle-même manuellement. Il y a probablement plus de travail que vous devrez faire pour vous assurer que le bouton calcule la taille correcte comme s'il avait une icône même si ce n'est pas le cas. Vous devrez peut-être parcourir le code source du bouton pour voir comment la référence à l'icône est stockée.

J'adore créer des peaux programmatiques qui font exactement ce que je veux et en utilisant des déclarations CSS intéressantes pour modifier les états - par exemple:

button.setStyle("customIconAlpha", .4); 

et puis bien sûr la peau ou la classe bouton personnalisé aurait:

var alpha:Number = getStyle("customIconAlpha") as Number; 

(pas sûr si vous devez typecast que l'on)

0

Le gros problème que je trouve avec des peaux de programme est que le bouton refu ses pour mesurer la largeur/hauteur. J'ai facilement contourné ceci en remplaçant les méthodes get pour chacune:

override fonction publique get largeur(): Nombre {return WIDTH; } override fonction publique get height(): Number {retourne HEIGHT; }

Dans mon cas, j'avais besoin de modifier les boutons dans un TabNavigator, donc pas de moyen facile de sous-classer le bouton. Heureusement, le parent de chaque skin est le bouton, donc en utilisant des méthodes statiques dans votre skin, vous pouvez identifier l'instance du Button auquel appartiennent les skins d'icônes.

Si vous utilisez le style «icône», un nouvel habillage sera créé pour chaque état. Vous devez donc garder cela à l'esprit lorsque vous modifiez l'état des icônes.

Questions connexes