Animação (DirectComposition)
Nota
Para aplicativos no Windows 10, recomendamos o uso de APIs Windows.UI.Composition em vez de DirectComposition. Para obter mais informações, consulte Modernizar seu aplicativo da área de trabalho usando a camada visual.
Este tópico discute os conceitos básicos da animação do Microsoft DirectComposition. Ele contém os seguintes tópicos:
- O que é uma animação?
- propriedades que podem ser animadas
- Funções de animação
- segmentos de animação
- Compatibilidade com o Windows Animation Manager
- tópicos relacionados
O que é uma animação?
Animation é uma ilusão de ótica criada fazendo rapidamente alterações incrementais em um visual durante um período de tempo enquanto redesenhar o visual após cada alteração ser feita. Como as redesenhadas ocorrem rapidamente, o cérebro percebe as mudanças incrementais como uma única cena em mudança, assim como em um filme ou vídeo de ação ao vivo.
A tabela a seguir descreve algumas das maneiras típicas de usar a animação.
Animação | Descrição |
---|---|
Rolagem | Use a animação para adicionar recursos como o impulso de emulação física a um controle de lista de rolagem. |
Transições de cena | Use a animação para criar transições de cena de navegação que fornecem continuidade entre tarefas em um fluxo de trabalho. As transições de cena de navegação fornecem contexto que mostra o usuário onde ele esteve, onde ele está e para onde ele precisa ir em seguida. |
Interações entre janelas | Anime elementos de interface do usuário de diferentes aplicativos de uma maneira que proporciona a percepção de continuidade perfeita entre eles para ajudar o usuário a concluir tarefas que envolvem a mudança de um aplicativo para outro. |
Propriedades que podem ser animadas
No DirectComposition, você anima um visual aplicando animação a propriedades individuais dos objetos que definem o visual. Por exemplo, se você quiser mover um visual horizontalmente pela tela, aplicará animação à propriedade OffsetX do visual. Da mesma forma, se você quisesse fazer uma simples rotação 2D animada de um visual, aplicaria animação à propriedade Angle de um objeto de transformação 2D e aplicaria o objeto de transformação 2D à propriedade Transform do visual.
O DirectComposition permite que você aplique animação a qualquer propriedade de objeto que tenha um valor escalar. Você pode aplicar animações simultâneas a várias propriedades e vários objetos.
O DirectComposition executa animações em um thread separado. Você pode iniciar uma animação ou um conjunto de animações e, em seguida, fazer outro trabalho em seus threads de aplicativo ou até mesmo colocar threads para dormir, enquanto o mecanismo de composição executa as animações na taxa de quadros apropriada.
Funções de animação
O DirectComposition anima uma propriedade de objeto com base em uma função de animação que você define. Uma função de animação é um constructo que especifica como o valor de uma propriedade de objeto muda durante um período de tempo. Por exemplo, você pode definir uma função de animação que altera o valor de uma propriedade de 1 para 360 ao longo de 4 segundos. Em seguida, se você aplicar a função de animação à propriedade Angle de um objeto de transformação de rotação 2D e aplicar o objeto de transformação à propriedade Transform de um visual, a função de animação girará o visual em um círculo completo ao longo de 4 segundos.
Uma função de animação é representada por um objeto de animação criado por uma chamada para o método IDCompositionDevice::CreateAnimation. Crie uma função de animação usando os métodos da interface IDCompositionAnimation de um objeto de animação para acrescentar segmentos de animação, um de cada vez, à matriz que define a função de animação. Ao acrescentar um segmento, você especifica um deslocamento baseado em zero que marca a hora de início do segmento, em relação ao início da função de animação. Os segmentos de animação devem ser acrescentados em ordem crescente de horários de início. A tentativa de acrescentar um segmento de animação cuja hora de início é anterior ou igual a um segmento anterior falhará. Uma função de animação pode ter uma hora de término especificada, indicando quando a função deve ser concluída.
A menos que especificado de outra forma, uma função de animação é iniciada quando o DWM (Gerenciador de Janelas da Área de Trabalho) recebe o comando para executar a animação. Cada segmento é executado até que a hora de início do próximo segmento seja atingida. Todas as alterações descontinuadas que ocorrem no valor da propriedade animada entre segmentos são consideradas alterações discretas.
Você aplica uma função de animação a uma propriedade definindo o valor da propriedade para o IDCompositionAnimation ponteiro do objeto de animação que representa a função de animação. O mesmo objeto de animação pode ser aplicado a várias propriedades do mesmo objeto, bem como às propriedades de outros objetos criados pelo mesmo dispositivo.
Segmentos de animação
Segmentos de animação são as definições de tempo fundamentais de uma função de animação; são os primitivos dos quais funções de animação de nível mais complexo e superior são criadas. Um segmento de animação é construído a partir de uma série de parâmetros que descrevem a função e a hora em que o segmento começa, em relação ao início da função de animação. Para cada segmento, o tempo (t) progride ao longo do eixo horizontal e começa em t = 0.
Segmento cúbico
O tempo de um segmento cúbico é definido por um polinomial cúbico. Para uma determinada entrada de tempo (t), o valor de saída é fornecido pela seguinte equação:
x(t) = emól + bt² + ct + d
O diagrama a seguir mostra uma função de animação que contém dois segmentos cúbicos. O primeiro segmento faz a transição de um valor de 0 para 16 em 4 segundos e o segundo altera o valor linearmente de 16 para 0 nos próximos 4 segundos. A primeira transição ocorre ao longo deste polinomial cúbico:
x(t) = tó - 6t² + 12t
e a segunda transição ocorre ao longo desta:
x(t) = - 4t + 16
Adicione um segmento cúbico a uma função de animação usando o método IDCompositionAnimation::AddCubic.
Segmento Sinusoidal
O tempo de um segmento sinusoidal é definido pela seguinte equação:
x(t) = Bias + Amplitude * sin(t*Frequency*2*PI + Phase*PI/180.0)
Adicione um segmento sinusoidal a uma função de animação usando o método IDCompositionAnimation::AddSinusoidal.
Repetir segmento
Um segmento de repetição repete uma parte anterior especificada de uma função de animação. Um segmento de repetição faz com que a parte especificada da função de animação faça loop indefinidamente até que o próximo segmento seja encontrado ou o final especificado da animação seja atingido. A parte anterior de uma animação é feita de outros segmentos, incluindo outros segmentos de repetição. Um segmento de repetição não pode ser usado como o primeiro segmento em uma função de animação.
O diagrama a seguir mostra uma função de animação que consiste em dois segmentos cúbicos de 4 segundos de duração cada, seguido por um segmento de repetição que dura 12 segundos. O segmento de repetição começa em 8 segundos na animação e repete os 6 segundos anteriores da animação duas vezes até que o segmento final seja atingido em 20 segundos.
Para adicionar um segmento de repetição a uma função de animação, use o método IDCompositionAnimation::AddRepeat.
Segmento final
Depois de construir uma função de animação a partir de segmentos, você pode acrescentar um segmento final para fazer com que a função de animação termine em um determinado momento. Se você não acrescentar um segmento final, o segmento final da função de animação será executado indefinidamente.
Você acrescenta um segmento final chamando o método IDCompositionAnimation::End, especificando um deslocamento do início da função de animação que indica o ponto final da função. O deslocamento deve ser maior do que o deslocamento inicial do segmento anterior. Além disso, um segmento final não pode ser usado como o primeiro primitivo em uma função de animação.
Ao chamar End, você também especifica um valor final para a propriedade que está sendo animada. A propriedade é definida como o valor final especificado no momento em que o ponto final da função de animação é atingido.
Depois de acrescentar um segmento final, você não pode acrescentar nenhum outro segmento à função de animação. Ou seja, todas as chamadas de método no objeto de animação falham, exceto IDCompositionAnimation::Reset. Chamar Redefinir retorna o objeto de animação para limpar o estado em que a função de animação não contém segmentos, momento em que você pode adicionar segmentos mais uma vez.
Compatibilidade com o Gerenciador de Animações do Windows
O Windows Animation Manager (Animação do Windows) gera primitivos de animação em um formato compatível com a API DirectComposition. Isso significa que o DirectComposition pode criar animações com base em primitivos de animação criados pela Animação do Windows.
Para obter mais informações, consulte do Gerenciador de Animação do Windows, o método IUIAnimationVariable2::GetCurve e gerenciando animação DirectComposition com o Windows Animation Manager v2.
Tópicos relacionados