Partilhar via


Animação (DirectComposition)

Observação

Para aplicativos no Windows 10, recomendamos o uso de APIs Windows.UI.Composition em vez de DirectComposition. Para saber mais, veja 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. Contém os seguintes tópicos:

O que é uma animação?

de animação é uma ilusão de ótica criada ao fazer 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 os redesenhos 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 live action.

A tabela a seguir descreve algumas das maneiras típicas de usar animação.

Animação Descrição
Rolagem Use a animação para adicionar recursos como o momento 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 ao usuário onde ele esteve, onde está e para onde precisa ir em seguida.
Interações entre janelas Anime elementos da interface do usuário de diferentes aplicativos de uma forma que dê a perceçã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, aplique a 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, em seguida, aplicaria o objeto de transformação 2D à propriedade Transform do visual.

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.

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 nos threads do aplicativo, ou até mesmo colocar threads em suspensão, enquanto o mecanismo de composição executa as animações na taxa de quadros apropriada.

Funções de animaçã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 é uma construção que especifica como o valor de uma propriedade de objeto muda ao longo de 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, em seguida, 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 IDCompositionDevice::CreateAnimation método. Você cria uma função de animação usando os métodos da interface deIDCompositionAnimationde 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 Desktop Window Manager (DWM) 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 descontínuas que ocorram 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 como 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

Os segmentos de animação são as definições de tempo fundamentais de uma função de animação; eles são os primitivos a partir dos quais funções de animação mais complexas e de nível superior são construídas. 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 polinômio cúbico. Para um dado tempo de entrada (t), o valor de saída é dado pela seguinte equação:

x(t) = a³ + 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 durante 4 segundos, e o segundo altera o valor linearmente de 16 para 0 nos 4 segundos seguintes. A primeira transição ocorre ao longo deste polinômio cúbico:

x(t) = t³ - 6t² + 12t

e a segunda transição ocorre ao longo desta:

x(t) = - 4t + 16

diagrama de uma função de animação com dois segmentos cúbicos

Adicionar um segmento cúbico a uma função de animação usando o IDCompositionAnimation::AddCubic método.

Segmento sinusoidal

O tempo de um segmento sinusoidal é definido pela seguinte equação:

x(t) = Enviesamento + Amplitude * sin(t*Frequência*2*PI + Fase*PI/180.0)

Adicionar um segmento sinusoidal a uma função de animação usando o IDCompositionAnimation::AddSinusoidal método.

Repetir segmento

Um segmento repetido repete uma parte anterior especificada de uma função de animação. Um segmento repetido faz com que a parte especificada da função de animação faça um loop indefinido 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 repetidos. Um segmento repetido 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, seguidos por um segmento repetido que dura 12 segundos. O segmento de repetição começa 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.

diagrama de uma função de animação que contém dois segmentos cúbicos e um segmento repetido

Para adicionar um segmento repetido a uma função de animação, use o IDCompositionAnimation::AddRepeat método.

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 IDCompositionAnimation::End método, 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, não é possível acrescentar outros segmentos à 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 o estado limpo no qual a função de animação não contém segmentos, momento em que você pode adicionar segmentos novamente.

Compatibilidade com o Gestor de Animação do Windows

O Gerenciador de Animação do Windows (Animação do Windows) produz primitivas de animação em um formato compatível com a API DirectComposition. Isso significa que 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 a animação DirectComposition com o Windows Animation Manager v2.

Conceitos do DirectComposition