Aplicando efectos a Labels, LinkButtons, Buttons, etc…

Si ya haz jugado con los efectos tan fácil de aplicar que tiene FLEX, te podrás haber dado cuenta que existen ciertos componentes que no “agarran” los efectos o no se animan. Esto ocurre cuando el componente es un Label (etiqueta) o en su defecto, posee un Label interno tal como un Button o un LinkButton. Por defecto, si aplicas un efecto a un Container (contenedor) todos sus hijos toman el efecto. Ejemplo, si creas un Canvas y le agregas un Label y un TextArea y le aplicas un efecto Fade (desvanecimiento) entonces cuando se este animando, solo el TextArea se verá desvanecer y el Label parecerá que aparece o se oculta de inmediato sin ese efecto transitorio de desvanecimiento.

Existen varios trucos para solventar esto. Uno es especificar literalmente a FLEX que tipo de fuente usará el Label. Es sencillo y se hace con una función setStyle pero por otro lado, tendrás que hacer lo mismo por cada Label, Button, …, que tengas en tu Container.

Acá propongo uno muy sencillo que te garantizará funcionar donde sea. Está en AS3. A nivel global creas un BlurFilter y un Array:

private var blur_filter:BlurFilter = new BlurFilter(0,0,0);
private var filtros:Array = new Array();

Luego, internamente en el código agregas el BlurFilter al Array:

filtros.push(blur_filter);

Y todo componente de FLEX tiene la propiedad filters. Bastará con asignar el Array filtros a la propiedad filter del Label, Button, LinkButton, …, para que mágicamente el texto de los Labels, o cualquier componente que tenga texo, se anime:

contenedor_u_objeto.filters = filtros;

Recuerda, basta con aplicar el filtro al contenedor, bien sea un Canvas, Panel, …, para que todos sus hijos se animen en conjunto sin importar que tipo de componentes sean 😛