Windows Presentation Foundation IFRN - RN

Documentos relacionados
c) Como você pode obter um gráfico que reproduza a forma espiral da trilha? Clique no botão 'Mostrar' na janela propriedades para exibir a resposta.

Capítulo 4 Criando uma animação

Fundamentos de Mecânica

Modelos e controles personalizados. José Antônio da Cunha IFRN

1ª Prova de Física I - FCM0101

Agora vamos decidir para cada layer loops de diferentes maneiras. A seguir exemplo:

Professora Bruna FÍSICA A. Aula 14 Velocidades que variam sempre da mesma forma. Página 189

Lista2: Cinemática Unidimensional

Unidade 5: Força e movimento

Interpretação de gráficos da Cinemática. Todas as questões deste teste referem-se a movimentos retilíneos.

Prof. Neckel. Capítulo 5. Aceleração média 23/03/2016 ACELERAÇÃO. É a taxa média de variação de velocidade em determinado intervalo de tempo = =

MOVIMENTO EM UMA LINHA RETA

Aplicações Informáticas B 12º Ano

ÍNDICE. PowerPoint CAPÍTULO 1... CAPÍTULO 2... CAPÍTULO 3...

Importante: i. Nas cinco páginas seguintes contém problemas para serem resolvidos e entregues.

Computação Gráfica. Primitivas Gráficas Professora Sheila Cáceres

UNIVERSIDADE FEDERAL DO CEARÁ CENTRO DE TECNOLOGIA PROGRAMA DE EDUCAÇÃO TUTORIAL APOSTILA DE CÁLCULO. Realização:

FÍSICA A. Aula 18 O vetor velocidade. Página 207

Derivadas Parciais Capítulo 14

Movimento Retilíneo Uniformemente Acelerado

Lista 4 MUV. Física Aplicada a Agronomia

v (a) v (b) v (c) v (d) v (e) 0 t 0 t 0 t 0 t 0 t

CRIAÇÃO DE ANIMAÇÕES. 5.1 Tipos de animação. Frame-by-frame

Experimento 4 Indutores e circuitos RL com onda quadrada

AULA 11. OBJETIVO: Conhecer e desenhar as Formas Geométricas VISÃO GERAL DA GEOMETRIA. Nesta aula vamos aprender a utilizar a classe Geometry.

Movimento retilíneo uniformemente

LISTA DE EXERCÍCIOS Nº 9

Ambiente de programação

LISTA DE EXERCÍCIOS Nº 3

Cinemática Bidimensional

Cinemática Unidimensional

CEDERJ - CENTRO DE EDUCAÇÃO SUPERIOR A DISTÂNCIA DO ESTADO DO RIO DE JANEIRO

Introdução a Tecnologia da Informação

Theory Portuguese (Portugal) Antes de iniciar este problema, leia cuidadosamente as Instruções Gerais que pode encontrar noutro envelope.

Professora FLORENCE. A aceleração pode ser calculada pelo gráfico através da tangente do ângulo α.

Experimento 4 Indutores e circuitos RL com onda quadrada

APÊNDICE B. Interpretação de Gráficos da Cinemática (Teste Final)

Lista5: Força e Movimento

As variáveis de rotação

GABARITO DA AFE02 FÍSICA 2ª SÉRIE 2016

Computação Gráfica - 04

Física. Física Módulo 1 Velocidade Relativa, Movimento de Projéteis, Movimento Circular

(Queda Livre, Lançamentos Verticais, velocidade media, mru, mruv, derivada e integrais)

GABARITO COMENTADO DE PROVAS DE FÍSICA CINEMÁTICA

MODELAGEM DE SISTEMAS

Escrita correta de resultados em notação

Lista1: Cinemática Unidimensional

Física I. Aula 05 Forças e Movimentos IV 2010/2011. Movimento Circular

Exercício 2 - modelagem básica de peça.

Halliday Fundamentos de Física Volume 2

Experimento 4 Indutores e circuitos RL com onda quadrada

CTIONSCRIPT. Painel Action

Física I 2009/2010. Aula02 Movimento Unidimensional

Movimento Retilíneo Uniforme

Capítulo 11 Rotações e Momento Angular

Física I. Aula 03: Movimento em um Plano. Tópico 03: Movimento de Projéteis. Observação

Utilização da Grelha Grid

Treino Gráficos de Energia

1 - Obter as séries temporais de um ponto (pág. 1/2)

Aula 4 Microsoft PowerPoint 2003: Criando uma Apresentação

EXERCÍCIOS PARA PROVA ESPECÍFICA E TESTÃO 1 ANO 4 BIMESTRE

Física B - Aula 3 Grandezas Escalares e Vetoriais

Interpolação no flash Nuno Machado

Experimento 4: Roteiro básico para uso do programa Origin

Atividade Complementar para a DP de Física 1. Profs. Dulceval Andrade e Luiz Tomaz

Dados adicionais: g = aceleração da gravidade = 10 m/s 2 1 mph (milhas por hora) = 1.61 km/h

5ª LISTA DE EXERCÍCIOS

Aplicando as condições iniciais: 0 0, h0. temos:

INSTRUÇÕES PARA A REALIZAÇÃO DA PROVA LEIA COM MUITA ATENÇÃO

Apostila Impress 01. Partes da Janela Principal do Impress

Aula 10: Introdução a Vetores e Matrizes

EQUAÇÃO DE TORRICELLI E LANÇAMENTO VERTICAL EXERCÍCIOS

Programação Gráfica Parte 3 Versão em Java 2006 PUCPR Tutoria de Jogos 1º Ano

Halliday & Resnick Fundamentos de Física

LISTA UERJ. Bolas Massa (g) Velocidade inicial (m/s) X 5 20 Y 5 10 Z (Uerj 2012) As relações entre os respectivos tempos de queda t x

onde: F : força exercida pelo cavalo. P: peso, força exercida pela terra. N: força exercida pelo plano inclinado (normal ao plano inclinado).

Considerações Iniciais

Cinemática I Movimento Retilíneo

Variáveis Aleatórias Contínuas e Distribuição de Probabilidad

LISTA DE ESTUDO DE FÍSICA

Cap. 7 - Momento Linear e Impulso

Movimento Retilíneo Uniforme e Uniformemente Variado MRU e MRUV

Lista 5: Trabalho e Energia

PROJETO INFORMÁTICA NA ESCOLA

Aplicação dos conceitos de posição, velocidade e aceleração. Aplicação de derivadas e primitivas de

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO 9º PERÍODO. Profª Danielle Casillo

6. FUNÇÃO QUADRÁTICA 6.1. CONSIDERAÇÕES PRELIMINARES

Universidade Federal fluminense. Física I e Física XVIII

Como gerar uma amostra aleatória simples com o Microsoft Excel

INFORMÁTICA BÁSICA CONTEÚDO PROGRAMÁTICO. IPD / Digitação (04)

1 Para expressar um ponto intermediário em função dos pontos extremos, precisamos

A Segunda Derivada: Análise da Variação de Uma Função

MANUAL MORMAII REF. PS4B

Aula 3 Introdução à Cinemática Movimento em 1 dimensão

Leis de Newton. Algumas aplicações das leis de Newton

EGR7249 Animação 01. Exercício Bolas Quicando

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE CAMPUS JOÃO CÂMARA APRESENTAÇÃO ELETRÔNICA POWER POINT (CONTINUAÇÃO)

CURSO INTRODUTÓRIO DE MATEMÁTICA PARA ENGENHARIA Cinemática I. Bruno Conde Passos Engenharia Civil João Victor Engenharia Civil

Manual do SymbolEditor. Stephen P. Allewell

Transcrição:

Windows Presentation Foundation IFRN - RN

Um dos recursos introduzidos no WPF que mais chamam a atenção são as animações. Antes do WPF, quando queríamos fazer alguma animação em nosso programa, devíamos criar um timer e ir alterando as propriedades dos objetos à medida que o tempo passasse. Mesmo que isto fosse relativamente simples, tínhamos de guardar cada estado do objeto, para que fosse mostrado corretamente.

Com o WPF, isto não é mais necessário: podemos especificar o valor inicial e final de uma propriedade, determinar a duração da animação e o WPF se encarrega de animar o objeto, sem que seja necessário escrever código para isso. Quando queremos fazer um objeto animado devemos alterar alguma propriedade sua em um determinado intervalo de tempo. Por exemplo, se queremos que um retângulo vá de um ponto a outro, devemos alterar sua posição com o tempo. Isto não é feito de uma vez, mas discretamente, a intervalos regulares. Em cada um destes intervalos, devemos especificar a nova posição do retângulo e desenhá-lo lá. Cada um destes desenhos é chamado de frame.

Quando queremos mostrar a animação, mostramos os frames em sequência e eles dão a impressão que o retângulo está se movendo. O intervalo de apresentação entre os frames determina a qualidade da animação: se mostrarmos mais frames por segundo, o espaço entre dois movimentos é menor e a animação é mais uniforme. Se mostrarmos menos frames por segundo, o movimento parece ser feito aos pulos. Por outro lado, um maior número de frames representa maior quantidade de dados a ser representada, e isto requer maior espaço para armazenamento e hardware mais potente para mostrar mais informações. Uma velocidade razoável para a exibição de animações é de 30 frames por segundo, taxa usada nos filmes, embora possamos usar até 15 frames por segundo, com qualidade aceitável. O WPF regula suas animações, por padrão, em 24 frames por segundo.

O WPF facilita bastante a criação de animações. Não precisamos mais criar código para gerar os frames, basta apenas dizer o valor inicial e final da propriedade que se quer alterar e a duração da animação. Ele se encarrega de gerar toda a animação. O seguinte código XAML movimenta um retângulo com bordas arredondadas na horizontal indefinidamente: <Canvas> <Rectangle Canvas.Top="100" Width="200" Height="100" RadiusX="10" RadiusY="10" Fill="Red"> <Rectangle.Triggers> <EventTrigger RoutedEvent="Rectangle.Loaded"> <BeginStoryboard> <Storyboard TargetProperty="(Canvas.Left)"> <DoubleAnimation From="0" To="800" Duration="0:0:5" </Storyboard> </BeginStoryboard> </EventTrigger> </Rectangle.Triggers> </Rectangle> </Canvas> RepeatBehavior="Forever" AutoReverse="True"/>

As animações em WPF normalmente são associadas a Triggers. Quando um gatilho é disparado, ele pode ativar uma animação chamando a açãobeginstoryboard. No exemplo anterior, a animação é disparada quando o carregamento do retângulo está completo (quando Rectangle.Loaded for disparado). Na ação que é executada quando o gatilho é disparado, colocamos um elemento do tipo BeginStoryboard. Este elemento tem uma propriedade chamada Storyboard, que contém nossa animação. Indicamos aí qual a propriedade que será afetada na animação (Canvas.Left a posição horizontal do elemento em relação ao Canvas) e definimos a animação, usando a classe DoubleAnimation. Esta classe anima um valor de tipo Double. Poderíamos ter outros tipos de animação, como PointAnimation ou ColorAnimation (por exemplo, se quisermos fazer que a cor de preenchimento do retângulo mudasse de vermelho para azul, usaríamos o ColorAnimation).

Os valores iniciais e finais são definidos com as propriedades From e To. Assim, a posição do retângulo irá variar de 0 a 800. A duração da animação é determinada pela propriedade Duration. Ela é indicada no formato dias.horas:minutos:segundos. Com apenas estes três atributos, a animação é executada apenas uma vez e pára. Quando queremos que ela execute mais de uma vez, usamos o atributo RepeatBehavior. O valor Forever faz que ela seja repetida indefinidamente. Caso quiséssemos que ela fosse repetida por três vezes apenas, colocaríamos RepeatBehavior= 3x. Podemos também fazer que ela se repita por um intervalo de tempo, como 10 segundos, usando RepeatBehavior= 0:0:10. Quando uma animação é repetida mais de uma vez, ela reinicia do valor que definimos no atributo From. Se quisermos que ela seja executada na repetição de maneira inversa, usamos AutoReverse= True. Outra propriedade que determina a maneira que a animação é finalizada é a propriedade FillBehavior. Se configurarmos seu valor para Stop, a propriedade do objeto volta ao valor inicial. Se configurarmos para HoldEnd, a propriedade fica com seu valor final.

Caso quiséssemos fazer mais de uma animação simultaneamente, poderíamos colocá-las no elemento Storyboard. Por exemplo, para fazer que nosso retângulo fosse movimentado tanto na posição horizontal quanto na vertical, poderíamos fazer algo como: <BeginStoryboard> <Storyboard TargetProperty="(Canvas.Left)"> <DoubleAnimation From="0" To="800" Duration="0:0:5" RepeatBehavior="Forever" AutoReverse="True"/> </Storyboard> </BeginStoryboard> <BeginStoryboard> <Storyboard TargetProperty="(Canvas.Top)"> <DoubleAnimation From="0" To="800" Duration="0:0:5" RepeatBehavior="Forever" AutoReverse="True"/> </Storyboard> </BeginStoryboard>

Podemos também animar transformações do elemento. Por exemplo, para rodar o retângulo, poderíamos aplicar a seguinte animação: <Canvas> <Canvas.Resources> <Style TargetType="{x:Type Rectangle}"> <Setter Property="RenderTransform"> <Setter.Value> <RotateTransform /> </Setter.Value> </Setter> </Style> </Canvas.Resources> <Rectangle Canvas.Left="200" Canvas.Top="100" Width="200" Height="100" RadiusX="10" RadiusY="10" Fill="Red"> <Rectangle.Triggers> <EventTrigger RoutedEvent="Rectangle.Loaded"> <BeginStoryboard> <Storyboard > <DoubleAnimation Storyboard.TargetProperty="RenderTransform.Angle" From="0" To="360" Duration="0:0:15" /> </Storyboard> </BeginStoryboard> </EventTrigger> </Rectangle.Triggers> </Rectangle> </Canvas>

Animação com Keyframes - Até agora, vimos como animar propriedades, com os valores variando de maneira contínua. Porém, este nem sempre é o que queremos. Por exemplo, podemos querer que um objeto se movimente em ziguezague pela tela. Neste caso a maneira mais simples de fazer a animação é usando keyframes. Este tipo de animação permite especificar os valores de uma propriedade a um determinado tempo. O exemplo seguinte mostra o retângulo andando em zigue-zague. Temos duas animações simultâneas, a primeira anima o movimento no eixo X e a segunda usa keyframes para animar o movimento no eixo Y: no instante 0, o valor de Y é 0, no instante 5, o valor de Y é 200, voltando a 0 e 200 nos instantes 10 e 15:

<BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="(Canvas.Left)" Duration="0:0:15" From="0" To="600" /> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Top)" Duration="0:0:15"> <LinearDoubleKeyFrame Value="0" KeyTime="0:0:0" /> <LinearDoubleKeyFrame Value="200" KeyTime="0:0:5" /> <LinearDoubleKeyFrame Value="0" KeyTime="0:0:10" /> <LinearDoubleKeyFrame Value="200" KeyTime="0:0:15" /> </DoubleAnimationUsingKeyFrames> </Storyboard> </BeginStoryboard>

Quando queremos que a propriedade varie linearmente, usamos LinearKeyframes. Isto faz com que a propriedade desejada mude continuamente do valor atual até o final, no intervalo indicado pela keyframe. Se quisermos que esta variação não seja linear, mas siga uma sequência determinada por uma curva, podemos usar SplineKeyframes. Neste caso, os valores são determinados por uma curva de Bezier cúbica. Quando usamos SplineKeyFrames indicar os dois pontos de controle que irão determinar a curva, usando o atributo KeySpline:

<Canvas> <Rectangle Canvas.Top="100" Width="200" Height="100" RadiusX="10" RadiusY="10" Fill="Red"> <Rectangle.Triggers> <EventTrigger RoutedEvent="Rectangle.Loaded"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="(Canvas.Left)" Duration="0:0:15" From="0" To="600" /> <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Top)" Duration="0:0:15"> <SplineDoubleKeyFrame Value="0" KeySpline="0,0.5 1,0.5" KeyTime="0:0:0" /> <SplineDoubleKeyFrame Value="200" KeySpline="0,0.5 1,0.5" KeyTime="0:0:5" /> <SplineDoubleKeyFrame Value="0" KeySpline="0,0.5 1,0.5" KeyTime="0:0:10" /> <SplineDoubleKeyFrame Value="200" KeySpline="0,0.5 1,0.5" KeyTime="0:0:15" /> </DoubleAnimationUsingKeyFrames> </Storyboard> </BeginStoryboard> </EventTrigger> </Rectangle.Triggers> </Rectangle> </Canvas>

Uma terceira maneira de variação da propriedade é a variação discreta, isto é, o valor da propriedade não varia no intervalo da keyframe. Isto é particularmente interessante como quando queremos animar uma propriedade que não tem estados intermediários, como Visibility. Neste caso, ela só tem 2 estados, ligada ou desligada. Podemos ligar e desligar a visibilidade do retângulo de 5 em 5 segundos com o seguinte código:

<BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="(Canvas.Left)" Duration="0:0:15" From="0" To="600" /> <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Visibility)" Duration="0:0:15"> <DiscreteObjectKeyFrame Value="{x:Static Visibility.Visible}" KeyTime="0:0:0" /> <DiscreteObjectKeyFrame Value="{x:Static Visibility.Collapsed}" KeyTime="0:0:5" /> <DiscreteObjectKeyFrame Value="{x:Static Visibility.Visible}" KeyTime="0:0:10" /> <DiscreteObjectKeyFrame Value="{x:Static Visibility.Collapsed}" KeyTime="0:0:15" /> </ObjectAnimationUsingKeyFrames> </Storyboard> </BeginStoryboard> Neste caso, usamos uma ObjectAnimationUsingKeyFrames, que permite animar a propriedade de um objeto, alterandoa em cada keyframe. Ao executar este código, vemos que o retângulo se move por 5 segundos, desaparece, reaparecendo mais adiante e desaparecendo após 15 segundos.

Aceleração e desaceleração Todas as animações vistas até agora têm uma velocidade constante. Porém, não é isso que vemos na vida real. Quando queremos criar uma animação semelhante à realidade, devemos considerar que os objetos não se movem com velocidade constante. Por exemplo, uma bola atirada para cima inicia com uma velocidade inicial, que é diminuída até ela atingir sua altura máxima, quando sua velocidade é zero e ela passa a cair e sua velocidade aumenta. Para atingir este efeito, temos as propriedades AccelerationRatio e DecelerationRatio, que irão determinar o tempo que a propriedade sofrerá aceleração ou desaceleração.

Estas propriedades têm valores entre 0 e 1, indicando o percentual de tempo do movimento que sofrerá ação da aceleração. No exemplo da bola, podemos criar uma animação em que a posição do objeto varia de 0 a 100 e que a propriedade DecelerationRatio seja 1 (isto indica que o movimento sofre ação da desaceleração todo o tempo do movimento). Com isso, a bola sobe até atingir seu ponto máximo. Se configurarmos a propriedade AutoReverse para True, a bola irá descer, com movimento acelerado (quando o movimento é invertido, a aceleração também o é). O código a seguir movimenta a bola para cima com uma desaceleração igual a 1, dando a impressão da ação da gravidade sobre ela:

<Canvas> <Ellipse Canvas.Top="300" Width="100" Height="100" Fill="Red"> <Ellipse.Triggers> <EventTrigger RoutedEvent="Rectangle.Loaded"> <BeginStoryboard> <Storyboard > <DoubleAnimation From="300" To="0" Storyboard.TargetProperty="(Canvas.Top)" Duration="0:0:0.5" RepeatBehavior="Forever" AutoReverse="True" DecelerationRatio="1"/> <DoubleAnimation From="0" To="600" Storyboard.TargetProperty="(Canvas.Left)" Duration="0:0:3" RepeatBehavior="Forever" AutoReverse="True"/> </Storyboard> </BeginStoryboard> </EventTrigger> </Ellipse.Triggers> </Ellipse> </Canvas>