形状动画

动画是可以应用于文本、图像、形状或 图表 的视觉效果。它们为演示文稿或其组成部分注入了生命。

为什么在演示文稿中使用动画?

使用动画,您可以

  • 控制信息的流动
  • 强调重要的要点
  • 增强您观众的兴趣或参与度
  • 使内容更易于阅读、理解或处理
  • 吸引您的读者或观众关注演示中的重要部分

PowerPoint 提供了多个选项和工具,用于在 进入退出强调运动路径 类别下使用动画及其效果。

Aspose.Slides 中的动画

  • Aspose.Slides 提供了您所需的类和类型,以便在 Aspose.Slides.Animation 命名空间下处理动画。
  • Aspose.Slides 提供了超过 150 种动画效果,它们在 EffectType 枚举中。 这些效果本质上与 PowerPoint 中使用的效果相同(或等效)。

将动画应用于文本框

Aspose.Slides for Android via Java 允许您将动画应用于形状中的文本。

  1. 创建 Presentation 类的实例。
  2. 根据其索引获取幻灯片的引用。
  3. 添加一个 rectangle IAutoShape
  4. IAutoShape.TextFrame 添加文本。
  5. 获取效果的主序列。
  6. IAutoShape 添加动画效果。
  7. TextAnimation.BuildType 属性设置为 BuildType 枚举中的值。
  8. 将演示文稿写入磁盘作为 PPTX 文件。

以下 Java 代码演示了如何将 Fade 效果应用于 AutoShape,并将文本动画设置为 By 1st Level Paragraphs 值:

// Instantiates a presentation class that represents a presentation file.
Presentation pres = new Presentation();
try {
    ISlide sld = pres.getSlides().get_Item(0);

    // Adds new AutoShape with text
    IAutoShape autoShape = sld.getShapes().addAutoShape(ShapeType.Rectangle, 20, 20, 150, 100);

    ITextFrame textFrame = autoShape.getTextFrame();
    textFrame.setText("第一段 \n第二段 \n第三段");

    // Gets the main sequence of the slide.
    ISequence sequence = sld.getTimeline().getMainSequence();

    // Adds Fade animation effect to shape
    IEffect effect = sequence.addEffect(autoShape, EffectType.Fade, EffectSubtype.None, EffectTriggerType.OnClick);

    // Animates shape text by 1st level paragraphs
    effect.getTextAnimation().setBuildType(BuildType.ByLevelParagraphs1);

    // Save the PPTX file to disk
    pres.save(path + "AnimText_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

将动画应用于图片框

  1. 创建 Presentation 类的实例。
  2. 根据其索引获取幻灯片的引用。
  3. 在幻灯片上添加或获取 PictureFrame
  4. 获取效果的主序列。
  5. PictureFrame 添加动画效果。
  6. 将演示文稿写入磁盘作为 PPTX 文件。

以下 Java 代码演示了如何将 Fly 效果应用于图片框:

// Instantiates a presentation class that represents a presentation file.
Presentation pres = new Presentation();
try {
    // Load Image to be added in presentaiton image collection
    IPPImage picture;
    IImage image = Images.fromFile("aspose-logo.jpg");
    try {
        picture = pres.getImages().addImage(image);
    } finally {
        if (image != null) image.dispose();
    }

    // Adds picture frame to slide
    IPictureFrame picFrame = pres.getSlides().get_Item(0).getShapes().addPictureFrame(ShapeType.Rectangle, 50, 50, 100, 100, picture);

    // Gets the main sequence of the slide.
    ISequence sequence = pres.getSlides().get_Item(0).getTimeline().getMainSequence();

    // Adds Fly from Left animation effect to picture frame
    IEffect effect = sequence.addEffect(picFrame, EffectType.Fly, EffectSubtype.Left, EffectTriggerType.OnClick);

    // Save the PPTX file to disk
    pres.save(path + "AnimImage_out.pptx", SaveFormat.Pptx);
} catch(IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

将动画应用于形状

  1. 创建 Presentation 类的实例。
  2. 根据其索引获取幻灯片的引用。
  3. 添加一个 rectangle IAutoShape
  4. 添加一个 Bevel IAutoShape(当单击此对象时,动画会播放)。
  5. 在 Bevel 形状上创建效果的序列。
  6. 创建一个自定义 UserPath
  7. 为移动到 UserPath 添加命令。
  8. 将演示文稿写入磁盘作为 PPTX 文件。

以下 Java 代码演示了如何将 PathFootball(路径足球)效果应用于形状:

// Instantiate a Presentation class that represents a PPTX file.
Presentation pres = new Presentation();
try {
    ISlide sld = pres.getSlides().get_Item(0);

    // Creates PathFootball effect for existing shape from scratch.
    IAutoShape ashp = sld.getShapes().addAutoShape(ShapeType.Rectangle, 150, 150, 250, 25);
    ashp.addTextFrame("动画文本框");

    // Adds the PathFootBall animation effect
    pres.getSlides().get_Item(0).getTimeline().getMainSequence().addEffect(ashp, EffectType.PathFootball,
            EffectSubtype.None, EffectTriggerType.AfterPrevious);

    // Creates some kind of "button".
    IShape shapeTrigger = pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Bevel, 10, 10, 20, 20);

    // Creates a sequence of effects for this button.
    ISequence seqInter = pres.getSlides().get_Item(0).getTimeline().getInteractiveSequences().add(shapeTrigger);

     // Creates a custom user path. Our object will be moved only after the button is clicked.
    IEffect fxUserPath = seqInter.addEffect(ashp, EffectType.PathUser, EffectSubtype.None, EffectTriggerType.OnClick);

     // Adds commands for moving since created path is empty.
    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);

     // Writes the PPTX file to disk
    pres.save("AnimExample_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

获取应用于形状的动画效果

您可能希望找出应用于单个形状的所有动画效果。

以下 Java 代码演示了如何获取应用于特定形状的所有效果:

// Instantiates a presentation class that represents a presentation file.
Presentation pres = new Presentation("AnimExample_out.pptx");
try {
    ISlide firstSlide = pres.getSlides().get_Item(0);

    // Gets the main sequence of the slide.
    ISequence sequence = firstSlide.getTimeline().getMainSequence();

    // Gets the first shape on slide.
    IShape shape = firstSlide.getShapes().get_Item(0);

    // Gets all animation effects applied to the shape.
    IEffect[] shapeEffects = sequence.getEffectsByShape(shape);

    if (shapeEffects.length > 0)
        System.out.println("形状 " + shape.getName() + " 有 " + shapeEffects.length + " 个动画效果。");
} finally {
    if (pres != null) pres.dispose();
}

更改动画效果的时间属性

Aspose.Slides for Android via Java 允许您更改动画效果的时间属性。

这是 Microsoft PowerPoint 中的动画定时窗格:

example1_image

下面是 PowerPoint 定时与 Effect.Timing 属性之间的对应关系:

这就是更改效果定时属性的方法:

  1. 应用 或获取动画效果。
  2. 设置所需的 Effect.Timing 属性的新值。
  3. 保存修改后的 PPTX 文件。

以下 Java 代码演示了此操作:

// Instantiates a presentation class that represents a presentation file.
Presentation pres = new Presentation("AnimExample_out.pptx");
try {
    // Gets the main sequence of the slide.
    ISequence sequence = pres.getSlides().get_Item(0).getTimeline().getMainSequence();

    // Gets the first effect of main sequence.
    IEffect effect = sequence.get_Item(0);

    // Changes effect TriggerType to start on click
    effect.getTiming().setTriggerType(EffectTriggerType.OnClick);

    // Changes effect Duration
    effect.getTiming().setDuration(3f);

    // Changes effect TriggerDelayTime
    effect.getTiming().setTriggerDelayTime(0.5f);

    // Saves the PPTX file to disk
    pres.save("AnimExample_changed.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

动画效果音效

Aspose.Slides 提供了这些属性,允许您处理动画效果中的声音:

添加动画效果音效

以下 Java 代码演示了如何添加动画效果声音并在下一个效果开始时停止它:

Presentation pres = new Presentation("AnimExample_out.pptx");
try {
    // Adds audio to presentation audio collection
    IAudio effectSound = pres.getAudios().addAudio(Files.readAllBytes(Paths.get("sampleaudio.wav")));

    ISlide firstSlide = pres.getSlides().get_Item(0);

    // Gets the main sequence of the slide.
    ISequence sequence = firstSlide.getTimeline().getMainSequence();

    // Gets the first effect of the main sequence
    IEffect firstEffect = sequence.get_Item(0);

    // Сhecks the effect for "No Sound"
    if (!firstEffect.getStopPreviousSound() && firstEffect.getSound() == null)
    {
        // Adds sound for the first effect
        firstEffect.setSound(effectSound);
    }

    // Gets the first interactive sequence of the slide.
    ISequence interactiveSequence = firstSlide.getTimeline().getInteractiveSequences().get_Item(0);

    // Sets the effect "Stop previous sound" flag
    interactiveSequence.get_Item(0).setStopPreviousSound(true);

    // Writes the PPTX file to disk
    pres.save("AnimExample_Sound_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

提取动画效果音效

  1. 创建 Presentation 类的实例。
  2. 根据其索引获取幻灯片的引用。
  3. 获取效果的主序列。
  4. 提取嵌入到每个动画效果的 setSound(IAudio value)

以下 Java 代码演示了如何提取嵌入在动画效果中的声音:

// Instantiates a presentation class that represents a presentation file.
Presentation presentation = new Presentation("EffectSound.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    // Gets the main sequence of the slide.
    ISequence sequence = slide.getTimeline().getMainSequence();

    for (IEffect effect : sequence)
    {
        if (effect.getSound() == null)
            continue;

        // Extracts the effect sound in byte array
        byte[] audio = effect.getSound().getBinaryData();
    }
} finally {
    if (presentation != null) presentation.dispose();
}

动画后

Aspose.Slides for Android via Java 允许您更改动画效果的“动画后”属性。

这是 Microsoft PowerPoint 中的动画效果窗格和扩展菜单:

example1_image

PowerPoint 效果 动画后 下拉列表与以下属性对应:

以下 Java 代码演示了如何更改动画后的效果:

// Instantiates a presentation class that represents a presentation file
Presentation pres = new Presentation("AnimImage_out.pptx");
try {
    ISlide firstSlide = pres.getSlides().get_Item(0);

    // Gets the first effect of the main sequence
    IEffect firstEffect = firstSlide.getTimeline().getMainSequence().get_Item(0);

    // Changes the after animation type to Color
    firstEffect.setAfterAnimationType(AfterAnimationType.Color);

    // Sets the after animation dim color
    firstEffect.getAfterAnimationColor().setColor(Color.BLUE);

    // Writes the PPTX file to disk
    pres.save("AnimImage_AfterAnimation.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

动画文本

Aspose.Slides 提供了这些属性,使您能够处理动画效果的 动画文本 块:

这是如何更改效果动画文本属性的方法:

  1. 应用 或获取动画效果。
  2. setBuildType(int value) 属性设置为 BuildType.AsOneObject 值,以关闭 按段落 动画模式。
  3. setAnimateTextType(int value)setDelayBetweenTextParts(float value) 属性设置新值。
  4. 保存修改后的 PPTX 文件。

以下 Java 代码演示了此操作:

// Instantiates a presentation class that represents a presentation file.
Presentation pres = new Presentation("AnimTextBox_out.pptx");
try {
    ISlide firstSlide = pres.getSlides().get_Item(0);

    // Gets the first effect of the main sequence
    IEffect firstEffect = firstSlide.getTimeline().getMainSequence().get_Item(0);

    // Changes the effect Text animation type to "As One Object"
    firstEffect.getTextAnimation().setBuildType(BuildType.AsOneObject);

    // Changes the effect Animate text type to "By word"
    firstEffect.setAnimateTextType(AnimateTextType.ByWord);

    // Sets the delay between words to 20% of effect duration
    firstEffect.setDelayBetweenTextParts(20f);

    // Writes the PPTX file to disk
    pres.save("AnimTextBox_AnimateText.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}