Featured Posts

ASP.NET MVC3 Preview 1 - Introducción Hace apenas unos pocos meses que salió ASP.NET MVC 2 y ya podemos dar un vistazo a los primeros bits de MVC 3. Si bien esto es sólo un CTP (es decir, ni siquiera es Beta) y puede haber muchos cambios...

Readmore

Hola Windows Phone 7 Series El día de hoy, en el Mix10, se anunció la plataforma de desarrollo para el Windows Phone 7 series (de aquí en adelante WP7). Si bien desde hace varios días corría la noticia, el anuncio oficial genera...

Readmore

RIA Services en práctica Parte I – Personalizando... WCF RIA Services es una excelente herramienta que podemos utilizar en Silverlight para manejar nuestro acceso a datos. Si aún no te has introducido en el tema, te recomiendo echar un vistazo a la serie...

Readmore

El programa WebSite Spark Hace unas horas Scott Gu anunció el WebSite Spark. Este programa está diseñado para apoyar a desarrolladores y diseñadores a obtener software y recursos de Microsoft sin costo alguno durante tres años....

Readmore

  • Prev
  • Next

Animaciones con Silverlight, parte II

Posted on : 02-04-2009 | By : Arturo Molina | In : Silverlight

Tags:

0

Continuamos por nuestro pequeño tutorial de animaciones. En esta ocasión vamos a ver un poco más a fondo los atributos que podemos modificar para darle a nuestra animación el toque que queramos.

En el post anterior usamos From y To para definir de donde a donde iba a variar el valor de la propiedad. También contamos con el atributo By, el cual es muy útil cuando no sabemos el valor actual de la propiedad que estamos cambiando. A By le podemos especificar por cuánto queremos variar el valor del atributo. Números positivos para aumentar y números negativos para disminuir.

Para efectos de rapidez y espacio, reutilizaremos el mismo code-behind en todos los ejemplos de este post y solo variaremos el XAML:

Code behind:

namespace Animaciones2._1

{

    public partial class Page : UserControl

    {

        public Page()

        {

            InitializeComponent();

            circulo.MouseLeftButtonUp += new MouseButtonEventHandler(circulo_MouseLeftButtonUp);

        }

 

        void circulo_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)

        {

            guion.Begin();

        }

    }

}

XAML:

<UserControl x:Class="Animaciones2._1.Page"

             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

             Width="100"

             Height="100">

    <UserControl.Resources>

        <Storyboard x:Name="guion">

            <DoubleAnimation Storyboard.TargetName="circulo"

                             Storyboard.TargetProperty="width"

                             By="-50" />

        </Storyboard>

    </UserControl.Resources>

    <Grid x:Name="LayoutRoot" Background="Black">

        <Ellipse x:Name="circulo"

                 Width="100"

                 Height="100"

                 Fill="Azure"/>

    </Grid>

</UserControl>

Resultado:

Ahora bien, podemos observar que si damos clic sobre el círculo para comenzar la animación 2 veces, éste desaparecerá, o mejor dicho, tendrá un ancho de 0px. Podemos tomar diferentes caminos para evitar esto:

  • Podemos agregar el atributo From para establecer un valor inicial de la propiedad.
  • Podemos poner en True el atributo AutoReverse, esto hará que la animación se vaya en reversa cuando termine.
  • Podemos usar FillBehavior para decirle que hacer a la animación cuando termine. Este atributo acepta dos valores:
    • HoldEnd: es el valor predeterminado e indica que la propiedad modificada se quedará en el mismo estado en que termina la animación.
    • Stop: indica que la animación debe ser detenida por completo por lo que las propiedades modificadas regresan a su estado original.

Otro atributo útil para controlar la animación es BeginTime. Con él podemos decirle a nuestra animación en qué momento empezar. Por ejemplo, si tenemos dos DoubleAnimation en un mismo Storyboard, podemos indicarle a una de ellas que comience cuando termine la otra. Podemos observar esto modificando el Storyboard del ejemplo de la siguiente manera:

<Storyboard x:Name="guion"

            AutoReverse="True">

        <DoubleAnimation Storyboard.TargetName="circulo"

                         Storyboard.TargetProperty="width"

                         By="-50" />

        <DoubleAnimation Storyboard.TargetName="circulo"

                         Storyboard.TargetProperty="height"

                         By="-50"

                         BeginTime="0:0:1"/>

</Storyboard>

Así obtenemos:

Otro atributo que nos permite jugar con nuestra animación es SpeedRatio, la cuál nos permite variar la velocidad con que se ejecuta la animación. Para ir más rápido usa valores arriba del 1, para ir mas lento usa valores entre el 0 y el 1 (el 0 no es un valor válido, pero podemos usar 0.1 o 0.01, etc…).

Finalmente, RepeatBehaviour permite indicar el número de veces que se repetirá la animación. Podemos indicar un número entero seguido de la letra “x” (Por ejemplo, 2x, 5x, etc.) o podemos especificar “forever” que repetirá la animación hasta que se detenga específicamente por ejemplo, usando el método Stop() del Storyboard.

Es importante recalcar que AutoReverse, BeginTime, Duration, FillBehavoir, RepeatBehavior y SpeedRatio son propiedades de la clase Timeline, de la cual heredan Storyboard, DoubleAnimation, ColorAnimation, etc. Esto significa que las podemos definir a nivel Storyboard o individualmente en cada animación del Storyboard.

Este tipo de animaciones se conoce como From/To/By. Les recomiendo experimentar con estos atributos para que se den una idea de lo que pueden hacer con ellos.

En el próximo post conoceremos otro tipo de animaciones conocido como Key-Frame, el cuál nos da mucho poder ya que podemos definir el estado del objeto en un momento determinado y como queremos que cambie en otro momento. Silverlight se encarga de interpolar los valores por nosotros para crear el efecto de animación. ¡Hasta la próxima!

Write a comment