PDA

Ver la Versión Completa : Compartir FloatAnimation


juniorSoft
07-03-2017, 15:54:16
Hola de nuevo Amigos,

Estoy creando un efecto para algunos botones específicos que al pasar el mouse sobre ellos se resalten haciéndose mas grandes, para ello estoy utilizando dos componentes FloatAnimations con la siguiente configuración:

1)En el Primer FloatAnimation modifico las propiedades
Durations = 0.5
PropertyName = Scale.X
StartValue = 1
StopValue = 1.2
Trigger = IsMouseOver=True
TriggerInverse =IsMouseOver=false

1)En el Segundo FloatAnimation modifico las propiedades
Durations = 0.5
PropertyName = Scale.Y
StartValue = 1
StopValue = 1.2
Trigger = IsMouseOver=True
TriggerInverse =IsMouseOver=false

Dichos componentes están colocados dentro de cada botón

La pregunta es, sin modificar el Default Style ya que modificaría todos los botones, es posible compartir esta funcionalidad para los botones que considere sin tener que agregar al CustomStyle o directamente a cada botón colocar los dos citados FloatAnimation, lo veo desde el punto de vista de los recursos consumidos ya que si tengo 100 botones por 2 FloatAnimation serian 200 FloatAnimation + 100 botones + todos los controles adicionales además de servirme esto para otros efectos que pueda crear.

AgustinOrtu
07-03-2017, 17:52:36
No te preocupes por eso, hasta que sea un problema (es una maldita costumbre que tenemos en nuestro rubro)

No creo que se pueda compartir, cada efecto esta asociado a un control en particular. Como haria para detectar el MouseOver en cada boton?

Por otra parte, es como decir, si tengo 100 botones tengo 100 captions, 100 rectangulos, 30 azules, 30 rojos, 30 grises, ... :D

juniorSoft
07-03-2017, 18:18:26
Hola AgustinOrtu Gracias por responder y por tus consejos,

Es una mania, a veces trato de hacer un equilibrio porque me gusta la genericidad, pensar en patrones antes que en resolver el problema especifico para cuando vuelva y se presente poder reutilizar pero no siempre es posible.

Imaginaba algo como asignar el parent del FloatAnimation en el evento pero cual evento si no existe un onBeforeMouseEnter del boton y asignarle nil en un evento que tampoco existe onAfterMouseOver, quizas debieron inventar un componente que sirva de intermediario para poder asignarle una lista de controles a los cuales aplicar el efecto, pero solo son quejas, hay que adaptarse a lo que se tiene.

AgustinOrtu
07-03-2017, 20:43:38
Creo haber explorado o leido algo sobre como estaban implementadas las Animaciones de FMX. Si mal no recuerdo, cada animacion envuelve a un thread que es el que realmente "realiza la animacion", es decir, el movimiento, el efecto, el lo que sea. Es logico porque al usar las animaciones la aplicacion no se bloquea, puesto que el trabajo esta en otro hilo. Ahora no se que tan "divertido" podria ser andar cambiandole al hilo el objeto que esta animando :p

En fin debes pensar en cada componente Animation como un Thread, y lo mas logico es que cada uno tenga el suyo.

En definitiva, hay muchos componentes que utilizan animaciones y efectos sin que te des cuenta, asi que si realmente te preocupa el "costo", hasta que no tengas un problema, no lo inventes

Si lo que te preocupa es lo poco practico que es crear una y otra vez la misma animacion y repetir codigo/componentes, eso se puede solucionar creando:

1. Tu propio componente si queres configurar todo en diseño
2. Crear todo en runtime, obviamente tenes que configurar todas las propiedades por codigo

juniorSoft
07-03-2017, 21:41:53
Realmente todavía no es un problema y la aplicación funciona correctamente solo que buscaba reducir consumo de memoria quizás por futuras funcionalidades que sumen carga a la memoria, de todas formas tengo la facilidad de que los botones están colocados en expander y puedo en caso de ser necesario optimizar y crear los componentes FloatAnimation al expandir el expander valga la redundancia.

Gracias Nuevamente por la explicación ^\||/