Animação (DirectComposition)

Observação

Para aplicativos no Windows 10, é recomendável usar Windows. UI. APIs de composição em vez de DirectComposition. Para obter mais informações, consulte Modernizar seu aplicativo da área de trabalho usando a camada Visual.

Este tópico aborda os conceitos básicos da animação Do Microsoft DirectComposition. Ela contém os seguintes tópicos:

O que é uma animação?

Animação é uma ilusão de ótica criada fazendo rapidamente alterações incrementais em um visual durante um período de tempo enquanto redesenha o visual após cada alteração ser feita. Como as redesenhamentos ocorrem rapidamente, o cérebro percebe as mudanças incrementais como uma única cena de 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 animação.

Animação Descrição
Rolagem Use 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 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 a seguir.
Interações entre janelas Animar elementos de interface do usuário de diferentes aplicativos de uma maneira que proporciona a percepção de continuidade contínua 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 aplicar 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 é alterado 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 . Você cria 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 começa 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. Quaisquer 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 ponteiro IDCompositionAnimation 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) = at³ + bt² + ctd +

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

diagram of an animation function with two cubic segments

Você adiciona 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) = BiasAmplitude + * sin(tFrequency**2*PI + Phase*PI/180.0)

Você adiciona 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.

diagram of an animation function that contains two cubic segments and one repeat segment

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 desde o 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 Redefinição 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 novamente.

Compatibilidade com Windows Animation Manager

Windows Animation Manager (Windows Animation) gera primitivos de animação em um formato compatível com a API directComposition. Isso significa que o DirectComposition pode criar animações baseadas em primitivos de animação criados pelo Windows Animation.

Para obter mais informações, consulte Windows Animation Manager, o método IUIAnimationVariable2::GetCurve e o Gerenciamento da Animação DirectComposition com Windows Animation Manager v2.

Conceitos do DirectComposition