Aplicar animações de formas em apresentações no Android
Introdução
Animações são efeitos visuais que podem ser aplicados a textos, imagens, formas ou gráficos. Elas dão vida às apresentações ou aos seus componentes.
Por que usar animações em apresentações?
Usando animações, você pode
- controlar o fluxo de informações
- enfatizar pontos importantes
- aumentar o interesse ou a participação do seu público
- tornar o conteúdo mais fácil de ler, assimilar ou processar
- chamar a atenção dos leitores ou espectadores para partes importantes em uma apresentação
O PowerPoint oferece muitas opções e ferramentas para animações e efeitos de animação nas categorias de entrada, saída, ênfase e caminhos de movimento.
Animações no Aspose.Slides
- Aspose.Slides fornece as classes e tipos que você precisa para trabalhar com animações no namespace
Aspose.Slides.Animation, - Aspose.Slides oferece mais de 150 efeitos de animação na enumeração EffectType. Esses efeitos são essencialmente os mesmos (ou equivalentes) usados no PowerPoint.
Aplicar animação a uma caixa de texto
Aspose.Slides para Android via Java permite que você aplique animação ao texto em uma forma.
- Crie uma instância da classe Presentation.
- Obtenha uma referência de slide através do seu índice.
- Adicione um
rectangleIAutoShape. - Adicione texto ao IAutoShape.TextFrame.
- Recupere a sequência principal de efeitos.
- Adicione um efeito de animação ao IAutoShape.
- Defina a propriedade
TextAnimation.BuildTypepara o valor da enumeraçãoBuildType. - Grave a apresentação no disco como um arquivo PPTX.
Este código Java mostra como aplicar o efeito Fade ao AutoShape e definir a animação de texto para o valor By 1st Level Paragraphs:
// Instancia uma classe de apresentação que representa um arquivo de apresentação.
Presentation pres = new Presentation();
try {
ISlide sld = pres.getSlides().get_Item(0);
// Adiciona um novo AutoShape com texto
IAutoShape autoShape = sld.getShapes().addAutoShape(ShapeType.Rectangle, 20, 20, 150, 100);
ITextFrame textFrame = autoShape.getTextFrame();
textFrame.setText("First paragraph \nSecond paragraph \n Third paragraph");
// Obtém a sequência principal do slide.
ISequence sequence = sld.getTimeline().getMainSequence();
// Adiciona o efeito de animação Fade à forma
IEffect effect = sequence.addEffect(autoShape, EffectType.Fade, EffectSubtype.None, EffectTriggerType.OnClick);
// Anima o texto da forma pelos parágrafos de primeiro nível
effect.getTextAnimation().setBuildType(BuildType.ByLevelParagraphs1);
// Salva o arquivo PPTX no disco
pres.save(path + "AnimText_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Aplicar animação a um PictureFrame
- Crie uma instância da classe Presentation.
- Obtenha a referência de um slide através do seu índice.
- Adicione ou obtenha um PictureFrame no slide.
- Recupere a sequência principal de efeitos.
- Adicione um efeito de animação ao PictureFrame.
- Grave a apresentação no disco como um arquivo PPTX.
Este código Java mostra como aplicar o efeito Fly a um picture frame:
// Instancia uma classe de apresentação que representa um arquivo de apresentação.
Presentation pres = new Presentation();
try {
// Carrega a imagem a ser adicionada à coleção de imagens da apresentação
IPPImage picture;
IImage image = Images.fromFile("aspose-logo.jpg");
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// Adiciona um quadro de imagem ao slide
IPictureFrame picFrame = pres.getSlides().get_Item(0).getShapes().addPictureFrame(ShapeType.Rectangle, 50, 50, 100, 100, picture);
// Obtém a sequência principal do slide.
ISequence sequence = pres.getSlides().get_Item(0).getTimeline().getMainSequence();
// Adiciona o efeito de animação Fly da esquerda ao quadro de imagem
IEffect effect = sequence.addEffect(picFrame, EffectType.Fly, EffectSubtype.Left, EffectTriggerType.OnClick);
// Salva o arquivo PPTX no disco
pres.save(path + "AnimImage_out.pptx", SaveFormat.Pptx);
} catch(IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Aplicar animação a uma forma
- Crie uma instância da classe Presentation.
- Obtenha a referência de um slide através do seu índice.
- Adicione um
rectangleIAutoShape. - Adicione um
BevelIAutoShape (quando este objeto for clicado, a animação será reproduzida). - Crie uma sequência de efeitos na forma bevel.
- Crie um
UserPathpersonalizado. - Adicione comandos para mover ao
UserPath. - Grave a apresentação no disco como um arquivo PPTX.
Este código Java mostra como aplicar o efeito PathFootball (caminho de futebol) a uma forma:
// Instancia uma classe Presentation que representa um arquivo PPTX.
Presentation pres = new Presentation();
try {
ISlide sld = pres.getSlides().get_Item(0);
// Cria o efeito PathFootball para a forma existente do zero.
IAutoShape ashp = sld.getShapes().addAutoShape(ShapeType.Rectangle, 150, 150, 250, 25);
ashp.addTextFrame("Animated TextBox");
// Adiciona o efeito de animação PathFootBall
pres.getSlides().get_Item(0).getTimeline().getMainSequence().addEffect(ashp, EffectType.PathFootball,
EffectSubtype.None, EffectTriggerType.AfterPrevious);
// Cria algum tipo de "botão".
IShape shapeTrigger = pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Bevel, 10, 10, 20, 20);
// Cria uma sequência de efeitos para este botão.
ISequence seqInter = pres.getSlides().get_Item(0).getTimeline().getInteractiveSequences().add(shapeTrigger);
// Cria um caminho de usuário personalizado. Nosso objeto será movido somente após o botão ser clicado.
IEffect fxUserPath = seqInter.addEffect(ashp, EffectType.PathUser, EffectSubtype.None, EffectTriggerType.OnClick);
// Adiciona comandos de movimentação já que o caminho criado está vazio.
IMotionEffect motionBhv = ((IMotionEffect)fxUserPath.getBehaviors().get_Item(0));
Point2D.Float[] pts = new Point2D.Float[1];
pts[0] = new Point2D.Float(0.076f, 0.59f);
motionBhv.getPath().add(MotionCommandPathType.LineTo, pts, MotionPathPointsType.Auto, true);
pts[0] = new Point2D.Float(-0.076f, -0.59f);
motionBhv.getPath().add(MotionCommandPathType.LineTo, pts, MotionPathPointsType.Auto, false);
motionBhv.getPath().add(MotionCommandPathType.End, null, MotionPathPointsType.Auto, false);
// Grava o arquivo PPTX no disco
pres.save("AnimExample_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Obter os efeitos de animação aplicados a uma forma
Os exemplos a seguir mostram como usar o método getEffectsByShape da interface [ISequence] para obter todos os efeitos de animação aplicados a uma forma.
Exemplo 1: Obter efeitos de animação aplicados a uma forma em um slide normal
Anteriormente, você aprendeu como adicionar efeitos de animação a formas em apresentações do PowerPoint. O código de exemplo a seguir mostra como obter os efeitos aplicados à primeira forma no primeiro slide normal da apresentação AnimExample_out.pptx.
Presentation presentation = new Presentation("AnimExample_out.pptx");
try {
ISlide firstSlide = presentation.getSlides().get_Item(0);
// Obtém a sequência principal de animação do slide.
ISequence sequence = firstSlide.getTimeline().getMainSequence();
// Obtém a primeira forma no primeiro slide.
IShape shape = firstSlide.getShapes().get_Item(0);
// Obtém os efeitos de animação aplicados à forma.
IEffect[] shapeEffects = sequence.getEffectsByShape(shape);
if (shapeEffects.length > 0)
System.out.println("The shape " + shape.getName() + " has " + shapeEffects.length + " animation effects.");
} finally {
if (presentation != null) presentation.dispose();
}
Exemplo 2: Obter todos os efeitos de animação, incluindo os herdados de marcadores de posição
Se uma forma em um slide normal possuir marcadores de posição que estão no slide de layout e/ou no slide mestre, e efeitos de animação foram adicionados a esses marcadores de posição, então todos os efeitos da forma serão reproduzidos durante a apresentação, incluindo os herdados dos marcadores de posição.
Suponha que temos um arquivo de apresentação PowerPoint sample.pptx com um slide contendo apenas uma forma de rodapé com o texto “Made with Aspose.Slides” e o efeito Random Bars está aplicado à forma.

Suponha também que o efeito Split esteja aplicado ao marcador de posição de rodapé no slide de layout.

E, finalmente, o efeito Fly In está aplicado ao marcador de posição de rodapé no slide master.

O código de exemplo a seguir mostra como usar o método getBasePlaceholder da interface [IShape] para acessar os marcadores de posição da forma e obter os efeitos de animação aplicados à forma de rodapé, incluindo aqueles herdados de marcadores de posição localizados nos slides de layout e mestre.
Presentation presentation = new Presentation("sample.pptx");
ISlide slide = presentation.getSlides().get_Item(0);
// Obtém os efeitos de animação da forma no slide normal.
IShape shape = slide.getShapes().get_Item(0);
IEffect[] shapeEffects = slide.getTimeline().getMainSequence().getEffectsByShape(shape);
// Obtém os efeitos de animação do marcador de posição no slide de layout.
IShape layoutShape = shape.getBasePlaceholder();
IEffect[] layoutShapeEffects = slide.getLayoutSlide().getTimeline().getMainSequence().getEffectsByShape(layoutShape);
// Obtém os efeitos de animação do marcador de posição no slide mestre.
IShape masterShape = layoutShape.getBasePlaceholder();
IEffect[] masterShapeEffects = slide.getLayoutSlide().getMasterSlide().getTimeline().getMainSequence().getEffectsByShape(masterShape);
System.out.println("Main sequence of shape effects:");
printEffects(masterShapeEffects);
printEffects(layoutShapeEffects);
printEffects(shapeEffects);
presentation.dispose();
static void printEffects(IEffect[] effects)
{
for (IEffect effect : effects)
{
String typeName = EffectType.getName(EffectType.class, effect.getType());
String subtypeName = EffectSubtype.getName(EffectSubtype.class, effect.getSubtype());
System.out.println(typeName + " " + subtypeName);
}
}
Output:
Main sequence of shape effects:
Fly Bottom
Split VerticalIn
RandomBars Horizontal
Alterar propriedades de tempo do efeito de animação
Aspose.Slides para Android via Java permite que você altere as propriedades de temporização de um efeito de animação.
Esta é a janela Animation Timing no Microsoft PowerPoint:

Estas são as correspondências entre PowerPoint Timing e as propriedades Effect.Timing :
- A lista suspensa Start do PowerPoint Timing corresponde à propriedade Effect.Timing.TriggerType.
- A opção Duration do PowerPoint Timing corresponde à propriedade Effect.Timing.Duration. A duração de uma animação (em segundos) é o tempo total que ela leva para completar um ciclo.
- A opção Delay do PowerPoint Timing corresponde à propriedade Effect.Timing.TriggerDelayTime.
É assim que você altera as propriedades de temporização do efeito:
- Aplicar ou obter o efeito de animação.
- Defina novos valores para as propriedades Effect.Timing que você precisar.
- Salve o arquivo PPTX modificado.
// Instancia uma classe de apresentação que representa um arquivo de apresentação.
Presentation pres = new Presentation("AnimExample_out.pptx");
try {
// Obtém a sequência principal do slide.
ISequence sequence = pres.getSlides().get_Item(0).getTimeline().getMainSequence();
// Obtém o primeiro efeito da sequência principal.
IEffect effect = sequence.get_Item(0);
// Altera o TriggerType do efeito para iniciar ao clicar
effect.getTiming().setTriggerType(EffectTriggerType.OnClick);
// Altera a Duração do efeito
effect.getTiming().setDuration(3f);
// Altera o TriggerDelayTime do efeito
effect.getTiming().setTriggerDelayTime(0.5f);
// Salva o arquivo PPTX no disco
pres.save("AnimExample_changed.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Som do efeito de animação
Aspose.Slides fornece estas propriedades para permitir que você trabalhe com sons em efeitos de animação:
Adicionar som a um efeito de animação
Este código Java mostra como adicionar um som a um efeito de animação e interrompê‑lo quando o próximo efeito começar:
Presentation pres = new Presentation("AnimExample_out.pptx");
try {
// Adiciona áudio à coleção de áudio da apresentação
IAudio effectSound = pres.getAudios().addAudio(Files.readAllBytes(Paths.get("sampleaudio.wav")));
ISlide firstSlide = pres.getSlides().get_Item(0);
// Obtém a sequência principal do slide.
ISequence sequence = firstSlide.getTimeline().getMainSequence();
// Obtém o primeiro efeito da sequência principal
IEffect firstEffect = sequence.get_Item(0);
// Verifica se o efeito está sem som
if (!firstEffect.getStopPreviousSound() && firstEffect.getSound() == null)
{
// Adiciona som ao primeiro efeito
firstEffect.setSound(effectSound);
}
// Obtém a primeira sequência interativa do slide.
ISequence interactiveSequence = firstSlide.getTimeline().getInteractiveSequences().get_Item(0);
// Define a flag "Stop previous sound" do efeito
interactiveSequence.get_Item(0).setStopPreviousSound(true);
// Grava o arquivo PPTX no disco
pres.save("AnimExample_Sound_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Extrair som de um efeito de animação
- Crie uma instância da classe Presentation.
- Obtenha a referência de um slide através do seu índice.
- Recupere a sequência principal de efeitos.
- Extraia o setSound(IAudio value) incorporado a cada efeito de animação.
Este código Java mostra como extrair o som incorporado a um efeito de animação:
// Instancia uma classe de apresentação que representa um arquivo de apresentação.
Presentation presentation = new Presentation("EffectSound.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
// Obtém a sequência principal do slide.
ISequence sequence = slide.getTimeline().getMainSequence();
for (IEffect effect : sequence)
{
if (effect.getSound() == null)
continue;
// Extrai o som do efeito em array de bytes
byte[] audio = effect.getSound().getBinaryData();
}
} finally {
if (presentation != null) presentation.dispose();
}
Após animação
Aspose.Slides para Android via Java permite que você altere a propriedade After animation de um efeito de animação.
Esta é a janela Animation Effect e o menu estendido no Microsoft PowerPoint:

A lista suspensa After animation do PowerPoint Effect corresponde a estas propriedades:
- A propriedade [setAfterAnimationType(int value)] que descreve o tipo de After animation :
- PowerPoint More Colors corresponde ao tipo AfterAnimationType.Color;
- PowerPoint Don’t Dim corresponde ao tipo AfterAnimationType.DoNotDim (tipo padrão de after animation);
- PowerPoint Hide After Animation corresponde ao tipo AfterAnimationType.HideAfterAnimation;
- PowerPoint Hide on Next Mouse Click corresponde ao tipo AfterAnimationType.HideOnNextMouseClick;
- A propriedade [setAfterAnimationColor(IColorFormat value)] que define um formato de cor de after animation. Essa propriedade funciona em conjunto com o tipo AfterAnimationType.Color. Se você mudar o tipo para outro, a cor de after animation será limpa.
Este código Java mostra como alterar um efeito de after animation:
// Instancia uma classe de apresentação que representa um arquivo de apresentação
Presentation pres = new Presentation("AnimImage_out.pptx");
try {
ISlide firstSlide = pres.getSlides().get_Item(0);
// Obtém o primeiro efeito da sequência principal
IEffect firstEffect = firstSlide.getTimeline().getMainSequence().get_Item(0);
// Altera o tipo de after animation para Color
firstEffect.setAfterAnimationType(AfterAnimationType.Color);
// Define a cor de escurecimento do after animation
firstEffect.getAfterAnimationColor().setColor(Color.BLUE);
// Grava o arquivo PPTX no disco
pres.save("AnimImage_AfterAnimation.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Animar texto
Aspose.Slides fornece estas propriedades para permitir que você trabalhe com o bloco Animate text de um efeito de animação:
- [setAnimateTextType(int value)] que descreve um tipo de animação de texto do efeito. O texto da forma pode ser animado:
- Tudo de uma vez (AnimateTextType.AllAtOnce tipo)
- Por palavra (AnimateTextType.ByWord tipo)
- Por letra (AnimateTextType.ByLetter tipo)
- [setDelayBetweenTextParts(float value)] define um atraso entre as partes do texto animado (palavras ou letras). Um valor positivo especifica a porcentagem da duração do efeito. Um valor negativo especifica o atraso em segundos.
É assim que você pode mudar as propriedades de Animate text do efeito:
- Aplicar ou obter o efeito de animação.
- Defina a propriedade [setBuildType(int value)] para o valor BuildType.AsOneObject para desativar o modo de animação By Paragraphs.
- Defina novos valores para as propriedades [setAnimateTextType(int value)] e [setDelayBetweenTextParts(float value)].
- Salve o arquivo PPTX modificado.
// Instancia uma classe de apresentação que representa um arquivo de apresentação.
Presentation pres = new Presentation("AnimTextBox_out.pptx");
try {
ISlide firstSlide = pres.getSlides().get_Item(0);
// Obtém o primeiro efeito da sequência principal
IEffect firstEffect = firstSlide.getTimeline().getMainSequence().get_Item(0);
// Altera o tipo de animação de texto do efeito para "Como um único objeto"
firstEffect.getTextAnimation().setBuildType(BuildType.AsOneObject);
// Altera o tipo de Animar texto do efeito para "Por palavra"
firstEffect.setAnimateTextType(AnimateTextType.ByWord);
// Define o atraso entre palavras como 20% da duração do efeito
firstEffect.setDelayBetweenTextParts(20f);
// Grava o arquivo PPTX no disco
pres.save("AnimTextBox_AnimateText.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
Perguntas Frequentes
Como posso garantir que as animações sejam preservadas ao publicar a apresentação na Web?
Export to HTML5 e habilite as opções responsáveis pelas animações de shape e de transition. HTML simples não reproduz animações de slides, enquanto HTML5 reproduz.
Como a mudança da ordem Z (ordem das camadas) das formas afeta a animação?
A ordem de animação e a ordem de desenho são independentes: um efeito controla o tempo e o tipo de aparecimento/desaparecimento, enquanto o z-order determina o que cobre o quê. O resultado visível é definido pela combinação de ambos. (Este é o comportamento geral do PowerPoint; o modelo de efeitos e formas do Aspose.Slides segue a mesma lógica.)
Existem limitações ao converter animações em vídeo para certos efeitos?
Em geral, as animações são suportadas, mas casos raros ou efeitos específicos podem ser renderizados de forma diferente. Recomenda‑se testar com os efeitos que você usa e com a versão da biblioteca.