Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   FireMonkey (https://www.clubdelphi.com/foros/forumdisplay.php?f=50)
-   -   Compartir FloatAnimation (https://www.clubdelphi.com/foros/showthread.php?t=91573)

juniorSoft 07-03-2017 15:54:16

Compartir FloatAnimation
 
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 ^\||/


La franja horaria es GMT +2. Ahora son las 04:14:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi