Управление переходами слайдов в презентациях на Android

Обзор

Переходы слайдов управляют тем, как слайды появляются во время показа. С помощью Aspose.Slides for Android via Java вы можете выбрать эффект перехода для каждого слайда, настроить переход по щелчку мыши или таймеру и задать параметры, специфичные для эффекта. В этой статье используются примеры на Java для применения переходов, установки точных длительностей переходов, управления временем показа слайда и создания перехода Morph между двумя слайдами. Примеры также показывают, как сохранить настройки в файл PPTX.

Добавление перехода слайда

Чтобы применить переход, загрузите презентацию с помощью класса Презентация и получите доступ к настройкам перехода слайда через getSlideShowTransition. Используйте setType со значением из перечисления TransitionType, затем сохраните презентацию.

В следующем примере к первому слайду применяется переход Circle, а ко второму — Comb. Используйте файл input.pptx с как минимум двумя слайдами.

import com.aspose.slides.*;

Presentation presentation = new Presentation("input.pptx");
try {
    if (presentation.getSlides().size() >= 2) {
        presentation.getSlides().get_Item(0).getSlideShowTransition().setType(TransitionType.Circle);
        presentation.getSlides().get_Item(1).getSlideShowTransition().setType(TransitionType.Comb);

        presentation.save("slide-transitions.pptx", SaveFormat.Pptx);
    } else {
        System.out.println("The input presentation must contain at least two slides.");
    }
} finally {
    presentation.dispose();
}

Добавление расширенного перехода слайда

Можно настроить, как долго слайд остаётся на экране и будет ли щелчок мыши продвигать показ. Следующие методы управляют этим поведением:

  • setAdvanceOnClick позволяет зрителю переходить по щелчку мыши.
  • setAdvanceAfter включает автоматический переход.
  • setAdvanceAfterTime задаёт задержку перед автоматическим переходом в миллисекундах.

Включите оба способа — по щелчку и по таймеру, чтобы зритель мог перейти щелчком либо подождать таймер. Чтобы использовать только таймер, передайте false в setAdvanceOnClick. Задержка управляет моментом перехода; она не задаёт длительность визуального эффекта перехода.

В этом примере разным эффектам присваиваются первые три слайда, а автоматический переход включён через 3, 5 и 7 секунд соответственно. Щелчками мыши также можно переходить между этими слайдами. Используйте файл input.pptx с как минимум тремя слайдами.

import com.aspose.slides.*;

Presentation presentation = new Presentation("input.pptx");
try {
    if (presentation.getSlides().size() >= 3) {
        ISlideShowTransition firstTransition = presentation.getSlides().get_Item(0).getSlideShowTransition();
        firstTransition.setType(TransitionType.Circle);
        firstTransition.setAdvanceOnClick(true);
        firstTransition.setAdvanceAfter(true);
        firstTransition.setAdvanceAfterTime(3000);

        ISlideShowTransition secondTransition = presentation.getSlides().get_Item(1).getSlideShowTransition();
        secondTransition.setType(TransitionType.Comb);
        secondTransition.setAdvanceOnClick(true);
        secondTransition.setAdvanceAfter(true);
        secondTransition.setAdvanceAfterTime(5000);

        ISlideShowTransition thirdTransition = presentation.getSlides().get_Item(2).getSlideShowTransition();
        thirdTransition.setType(TransitionType.Zoom);
        thirdTransition.setAdvanceOnClick(true);
        thirdTransition.setAdvanceAfter(true);
        thirdTransition.setAdvanceAfterTime(7000);

        presentation.save("advanced-transitions.pptx", SaveFormat.Pptx);
    } else {
        System.out.println("The input presentation must contain at least three slides.");
    }
} finally {
    presentation.dispose();
}

Чтобы проверить, включён ли автоматический переход, вызовите getAdvanceAfter. Хранение задержки само по себе не указывает, активен ли таймер.

В следующем примере открывается файл, сохранённый выше, выводятся все включённые таймеры и отключается автоматический переход для слайдов с задержкой более двух секунд. Для этих слайдов включаются щелчки мышью, после чего сохраняются обновлённые настройки.

import com.aspose.slides.*;

Presentation presentation = new Presentation("advanced-transitions.pptx");
try {
    for (ISlide slide : presentation.getSlides()) {
        ISlideShowTransition transition = slide.getSlideShowTransition();

        if (transition.getAdvanceAfter()) {
            System.out.println("Slide " + slide.getSlideNumber() + ": advance after " + transition.getAdvanceAfterTime() + " ms.");

            if (transition.getAdvanceAfterTime() > 2000) {
                transition.setAdvanceAfter(false);
                transition.setAdvanceOnClick(true);
            }
        }
    }

    presentation.save("adjusted-transitions.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Точное управление временем перехода

Используйте setDuration для указания точной длительности эффекта перехода в миллисекундах. Метод getSlideShowTransition слайда раскрывает эти настройки через ISlideShowTransition:

Метод Назначение
setDuration Устанавливает длительность самого эффекта перехода в миллисекундах.
setAdvanceAfterTime Задаёт задержку перед автоматическим переходом слайда в миллисекундах. Передайте true в setAdvanceAfter для активации таймера.
setSpeed Выбирает предопределённую категорию скорости из TransitionSpeed: Slow, Medium или Fast. Используется, когда точная длительность не указана.

setDuration управляет только эффектом перехода; он не определяет, как долго слайд остаётся видимым. Задержку автоматического перехода настраивайте отдельно. Если явная длительность не задана, Aspose.Slides определяет её из типа перехода и значения getSpeed .

Применить одинаковую длительность ко всем слайдам

Для равномерного темпа применяйте один и тот же эффект и точную длительность ко всем слайдам. В этом примере загружается input.pptx, выбирается Fade из TransitionType, и каждой переходу задаётся длительность 750 мс. Автоматический переход включён через 5 000 мс, а переход по щелчку мыши отключён; результат сохраняется в PPTX.

import com.aspose.slides.*;

Presentation presentation = new Presentation("input.pptx");
try {
    for (ISlide slide : presentation.getSlides()) {
        ISlideShowTransition transition = slide.getSlideShowTransition();
        transition.setType(TransitionType.Fade);
        transition.setDuration(750);

        // Настройте автоматический переход независимо от длительности эффекта.
        transition.setAdvanceAfter(true);
        transition.setAdvanceAfterTime(5000);
        transition.setAdvanceOnClick(false);
    }

    presentation.save("precise-transitions.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Установка разных длительностей для отдельных слайдов

Разные слайды могут иметь разные длительности эффектов. Например, короткий переход для титульного слайда и более длительный — для введения раздела. В примере первой слайд получает 500 мс, второй — 1 200 мс. Используйте файл input.pptx с минимум двумя слайдами.

import com.aspose.slides.*;

Presentation presentation = new Presentation("input.pptx");
try {
    if (presentation.getSlides().size() >= 2) {
        ISlideShowTransition firstTransition = presentation.getSlides().get_Item(0).getSlideShowTransition();
        firstTransition.setType(TransitionType.Fade);
        firstTransition.setDuration(500);

        ISlideShowTransition secondTransition = presentation.getSlides().get_Item(1).getSlideShowTransition();
        secondTransition.setType(TransitionType.Push);
        secondTransition.setDuration(1200);

        presentation.save("individual-transition-durations.pptx", SaveFormat.Pptx);
    } else {
        System.out.println("The input presentation must contain at least two slides.");
    }
} finally {
    presentation.dispose();
}

Координация переходов с анимированным выводом

При подготовке animated GIF, HTML5 presentation или video задавайте точные длительности переходов перед экспортом, чтобы соответствовать задуманному темпу. Например, используйте 600‑миллисекундный fade между сценами и отдельно регулируйте задержку перехода каждого слайда, чтобы было время для озвучки или контента.

Для GIF и видео согласуйте частоту кадров вывода с длительностью эффекта: 600 мс ≈ 18 кадров при 30 fps. В HTML5 включите анимированные переходы в настройках экспорта. Проверьте поддерживаемые эффекты и параметры времени выбранного формата и просмотрите результат, чтобы убедиться в синхронности.

Чтение существующей длительности перехода

Вызовите getDuration перед изменением перехода, чтобы определить, хранится ли явное значение. Значение -1 означает, что длительность не задана явно; неотрицательное значение указывает хранённую длительность в миллисекундах. Неустановленное значение не является рассчитанной длительностью воспроизведения: Aspose.Slides использует тип перехода и значение getSpeed для её вычисления. Установка типа перехода может инициализировать длительность, поэтому сначала проверьте оригинальные настройки.

import com.aspose.slides.*;

Presentation presentation = new Presentation("input.pptx");
try {
    for (ISlide slide : presentation.getSlides()) {
        ISlideShowTransition transition = slide.getSlideShowTransition();
        int duration = transition.getDuration();

        if (duration >= 0) {
            System.out.println("Slide " + slide.getSlideNumber() + ": stored transition duration is " + duration + " ms.");
        } else {
            System.out.println("Slide " + slide.getSlideNumber() + ": no explicit duration; timing depends on transition type " + transition.getType() + " and speed " + transition.getSpeed() + ".");
        }
    }
} finally {
    presentation.dispose();
}

Переход Morph

Переход Morph анимирует изменения между объектами на последовательных слайдах. Чтобы создать простой эффект Morph, клонируйте слайд, переместите или измените размер объекта в клоне и примените переход Morph ко второму слайду. Это позволяет анимировать соответствующие объекты между их исходным и изменённым состоянием.

В следующем примере создаётся слайд с текстовым прямоугольником, он клонируется, а позиция и размер прямоугольника изменяются в копии. Затем для второго слайда выбирается Morph из перечисления TransitionType. Откройте сохранённый файл в просмотрщике презентаций, поддерживающем Morph, чтобы увидеть эффект во время показа.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide firstSlide = presentation.getSlides().get_Item(0);
    IAutoShape rectangle = firstSlide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 400, 100);
    rectangle.getTextFrame().setText("Morph transition");

    ISlide secondSlide = presentation.getSlides().addClone(firstSlide);
    IShape movedRectangle = secondSlide.getShapes().get_Item(0);
    movedRectangle.setX(movedRectangle.getX() + 100);
    movedRectangle.setY(movedRectangle.getY() + 50);
    movedRectangle.setWidth(movedRectangle.getWidth() - 200);
    movedRectangle.setHeight(movedRectangle.getHeight() - 10);

    secondSlide.getSlideShowTransition().setType(TransitionType.Morph);

    presentation.save("morph-transition.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

Типы перехода Morph

Перечисление TransitionMorphType задаёт, как Morph сопоставляет и анимирует содержимое:

  • ByObject рассматривает каждую форму как целый объект.
  • ByWord анимирует текст, сопоставляя слова, где это возможно.
  • ByChar анимирует текст, сопоставляя отдельные символы.

Используйте setType для выбора Morph перед обращением к getValue. Полученное значение предоставляет интерфейс IMorphTransition, у которого метод setMorphType выбирает режим сопоставления.

В этом примере открывается презентация, созданная в предыдущем разделе, и настраивается второй слайд для анимации Morph по словам.

import com.aspose.slides.*;

Presentation presentation = new Presentation("morph-transition.pptx");
try {
    if (presentation.getSlides().size() >= 2) {
        ISlideShowTransition transition = presentation.getSlides().get_Item(1).getSlideShowTransition();
        transition.setType(TransitionType.Morph);
        ITransitionValueBase transitionValue = transition.getValue();

        if (transitionValue instanceof IMorphTransition) {
            IMorphTransition morphTransition = (IMorphTransition) transitionValue;
            morphTransition.setMorphType(TransitionMorphType.ByWord);
            presentation.save("morph-by-word.pptx", SaveFormat.Pptx);
        } else {
            System.out.println("Morph transition options are unavailable.");
        }
    } else {
        System.out.println("The input presentation must contain at least two slides.");
    }
} finally {
    presentation.dispose();
}

Установка эффектов перехода

Некоторые переходы раскрывают дополнительные параметры, такие как направление или начало эффекта с чёрного экрана. Доступные параметры зависят от перехода, выбранного через setType. Сначала задайте тип, затем используйте соответствующий интерфейс, полученный через getValue.

В следующем примере к первому слайду input.pptx применяется переход Cut. Через IOptionalBlackTransition вызывается setFromBlack, чтобы переход начинался с чёрного экрана.

import com.aspose.slides.*;

Presentation presentation = new Presentation("input.pptx");
try {
    ISlideShowTransition transition = presentation.getSlides().get_Item(0).getSlideShowTransition();
    transition.setType(TransitionType.Cut);
    ITransitionValueBase transitionValue = transition.getValue();

    if (transitionValue instanceof IOptionalBlackTransition) {
        IOptionalBlackTransition cutTransition = (IOptionalBlackTransition) transitionValue;
        cutTransition.setFromBlack(true);
        presentation.save("cut-from-black.pptx", SaveFormat.Pptx);
    } else {
        System.out.println("Cut transition options are unavailable.");
    }
} finally {
    presentation.dispose();
}

FAQ

Можно ли управлять скоростью воспроизведения перехода слайда?

Да. Предпочитайте setDuration, когда требуется точная длительность эффекта в миллисекундах. Используйте setSpeed, если достаточно предопределённой категории TransitionSpeed — Slow, Medium или Fast, и явная длительность не задаётся. Эти настройки контролируют только эффект перехода, независимо от задержки автоматического перехода.

Можно ли привязать звук к переходу и зациклить его?

Да. Назначьте встроенный звук с помощью setSound, передайте StartSound из перечисления TransitionSoundMode в setSoundMode, и включите setSoundLoop со значением true. Звук будет повторяться до следующего звукового события в показе.

Как быстрее всего применить один и тот же переход ко всем слайдам?

Пройдитесь по коллекции getSlides презентации и вызовите setType с тем же значением для перехода каждого слайда. Установите любые параметры времени и эффекта в том же цикле, чтобы поведение было одинаковым на всех слайдах.

Как проверить, какой переход сейчас установлен на слайде?

Вызовите getType у результата getSlideShowTransition слайда. Метод вернёт значение из перечисления TransitionType; None означает, что переход не установлен.