logo
  • Home
  • Acerca
  • Autores
  • Faq
  • Rede
  Twitter   Feed-me! RSS!

Animação dinâmica para menu com imagens em Silverlight 2.

Colocado por Flavia Moreira na(s) categoria(s): Animação, Animações, Asp.Net, Blend, blog silverlight, blogsilverlight, C#, DoubleAnimationUsingKeyFrames, Estilo, Expression Blend, Microsoft, Microsoft Blend, mouseleftbutton, silverlight, Silverlight 2, SplineDoubleKeyFrame, Storyboard, Tutoriais, Visual Studio, Visual Studio 2008 em 02 20th, 2009 | 1 Comentário

Neste artigo será mostrado como criar animação dinâmica para um simples menu com imagens, porém não é o objetivo deste artigo mostrar a criação do design, apenas será mostrado a codificação para criar a animação dinâmica do menu. Esta animação consiste apenas em usar o fator de escala para as imagens, ou seja, quando o mouse estiver sobre a imagem, o fator de escala será mudado e quando o mouse não estiver sobre a imagem, o fator de escala volta para seu estado inicial.  

A Figura 1.0, mostra o menu com as imagens.

Figura 1.0

Figura 1.0

 Inicie um projeto no Microsoft Blend 2 ou no Visual Studio 2008.  Adicione algumas imagens no seu projeto e adicione o controle do tipo IMAGE e seta as propriedades: Name, Height, Width, Source  e em Transform, mude a escala, deixe da forma desejada.

Obs: Você deverá deixar a propriedade Transform setada no código, ou irá dar um erro.  Segue o Exemplo, de como deverá ficar  o controle IMAGE na parte do Xaml:

 

 <Image Height=”38″ Width=”38″ Source=”icoHome1.png” Stretch=”Fill” Canvas.Top=”8″ Canvas.Left=”72″ RenderTransformOrigin=”0.5,0.5″ x:Name=”imgHome”>

<Image.RenderTransform>

 <TransformGroup>

<ScaleTransform ScaleX=”1″ ScaleY=”1″/>

<SkewTransform/>

<RotateTransform/>

<TranslateTransform/>

</TransformGroup>

</Image.RenderTransform>

</Image>

 

Eu adicionei 4 imagens em 3D do tipo png .

 

Com todas as suas imagens devidamente configuradas, na parte do codeBehind, iremos adicionar a declaração dos eventos do controle Image  dentro do construtor da classe  page.xaml.cs, Exemplo: 

 

  public ucMenuPrincipal()

                               {

                                               // Required to initialize variables

                                               InitializeComponent();

            SbAnimacaoDowhile();

 

            imgHome.MouseEnter += new MouseEventHandler(imagem_MouseEnter);

            imgContato.MouseEnter += new MouseEventHandler(imagem_MouseEnter);

            imgNewsLetter.MouseEnter += new MouseEventHandler(imagem_MouseEnter);

            imgVideos.MouseEnter += new MouseEventHandler(imagem_MouseEnter);

 

            imgHome.MouseLeave += new MouseEventHandler(imagem_MouseLeave);

            imgContato.MouseLeave += new MouseEventHandler(imagem_MouseLeave);

            imgNewsLetter.MouseLeave += new MouseEventHandler(imagem_MouseLeave);

            imgVideos.MouseLeave += new MouseEventHandler(imagem_MouseLeave);

            }

 

Repare que os eventos MouseEnter de todos os controles usam o mesmo método, o mesmo processo acontece para o MouseLeave.  

 Animação dinâmica:

Crie os objetos:

 private bool _flagMenu = false;  

SplineDoubleKeyFrame _splineIn; 

SplineDoubleKeyFrame _splineOut;

 

 Depois, o primeiro passo é criar  um método para o DoubleAnimationUsingKeyFrames.

 

Note no método que está sendo passado dois parâmetros: O primeiro passa qual objeto irá sofrer a animação, neste caso, o Controle do Tipo Image, e  o segundo qual propriedade será executada, ou seja a escala. 

    public DoubleAnimationUsingKeyFrames GetAnimacao(DependencyObject img, string propertyPath)

        {

          

            DoubleAnimationUsingKeyFrames _dbAnimation = new DoubleAnimationUsingKeyFrames();

            _dbAnimation.BeginTime = TimeSpan.FromSeconds(0);

         

            _splineIn = new SplineDoubleKeyFrame();

            _splineOut = new SplineDoubleKeyFrame();

            _splineIn.KeyTime = TimeSpan.FromSeconds(0.4);

            _splineOut.KeyTime = TimeSpan.FromSeconds(0.4);

 

                if (!_flagMenu)

                {

                _splineIn.Value = 1.5;

                _dbAnimation.KeyFrames.Add(_splineIn);

                 }

                else

                {

                    _splineOut.Value = 1;

                    _dbAnimation.KeyFrames.Add(_splineOut);

                }

 

         

            Storyboard.SetTarget(_dbAnimation, img);

            Storyboard.SetTargetProperty(_dbAnimation, new PropertyPath(propertyPath, new object[0]));

 

            return _dbAnimation;

        }

 

Ciando a Storyboard

   

public void CriaAnimacao(DependencyObject image)

        {

            Storyboard _SbMenu = new Storyboard();

          

            DoubleAnimationUsingKeyFrames scaleX = GetAnimacao(image, “(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)”);

            DoubleAnimationUsingKeyFrames scaleY = GetAnimacao(image, “(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)”);

            _SbMenu.Children.Add(scaleX);

            _SbMenu.Children.Add(scaleY);

            _SbMenu.Begin();

 

        }

 

Os eventos

private void imagem_MouseEnter(object sender, MouseEventArgs e)

        {

          

            CriaAnimacao((Image)sender);

            _flagMenu = true;

        }

 

        void imagem_MouseLeave(object sender, MouseEventArgs e)

        {

 

            CriaAnimacao((Image)sender);

            _flagMenu = false;

        }

 

 

Abraços

Flávia Moreira 

 

 

 

 

 

 



Veja o post original no blog do autor aqui!  

Flavia Moreira

Escrito por Flavia Moreira @ http://flamoreira.wordpress.com
Saiba mais sobre o autor na sua pagina de perfil
Outros posts do autor:
» Silverlight e GPU Acceleration
» Impressão com Silverlight 4
» Silverlight 3 e Visual Studio 2008

Comentários ( 1 Comentário )
 

Olá, estou precisando de sua ajuda.
Como eu faço para entrar em contato com vc????
por favor, to precisando tirar umas dúvidas com vc sobre silverlight, pois eu sou iniciante e estou precisando disso para conquistar algo que eu sempre quis.
se puder manda um e-mail pra mim: marcelo.infotechjr@gmail.com ou marcelogoncalves22@hotmail.com

marcelo juntou estes bytes...
Deixe um comentário



Spam Protection by WP-SpamFree

ACERCA

O que é o RedeRIA ?

O redeRIA não é nada mais que um agregador de feed's que disponibiliza o conteudo de varios blogs e autores ao redor do mundo RIA, actualmente agregamos mais de 2790 entradas vindas de 53 blogs especializados em ria’s, pelo que só fica a ganhar em assinar o feed ou seguir a comunidade no twitter.

Se acha que o seu blog ou um blog de um amigo é interessante e util para os leitores o redeRIA, faça a sua submissão aqui.

Feed: assine já
Twitter: siga-nos

GOOGLE

Votação


Deveria o RedeRia agregar conteúdo em inglês?
Ver Resultados

AUTORES


Eduardo KrausAlexandre TadashiBindableCognitiva SoluçõesDaniel LopesDaniel SchmitzDanielPedrinhaDClick TeamEbercomEdgard DavidsonElvis FernandesErko BrideeFabiel PrestesFábio Batista da SilvaFabio da SilvaFabriccio BernardesFelipe BorellaFlavia MoreiraGabriel VersalliniGabriela T. PerryIgor MusardoJanderson CardosoJoão AugustoJose Carlos FielKelps SousaLeonardo FrançaLucas MarçalLuis MessiasLuiz TarabalMario JuniorMário SantosMauro MartinsPablo SouzaPedro ClaudioreneRia BrazilriaPTRicardo CerqueiraRobson FernandesRodrigo Pereira FragaSaintBrSamuelFacchinelloSergio SouzaSilva DeveloperStefan HorochovecTech CaffeTecinforThiago BuenoVedVinícius SandimWillian ManoXAML Cast

PUBLICIDADE








Powered by Wordpress & msdevstudio.com