如何在Javafx中切换视频片段时淡入和淡出特效?

时间:2014-03-17 13:50:24

标签: javafx javafx-2 effects javafx-8

在下面的代码中,我已经在mview3中播放了mp4视频,当我点击切换按钮时,我想要mview3停止时的淡出效果和mview2启动时的一些淡入效果。

swtch.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
      time1 = mplayer3.getCurrentTime();
      mplayer2.setStartTime(time1);
      mplayer2.play();
      secondaryLayout.getChildren().add(mview2);
      secondaryLayout.getChildren().remove(mview3);

请建议任何可能的替代方案以启用效果。

1 个答案:

答案 0 :(得分:2)

我为你做了一个例子,也许你可以查看this页面,并阅读有关Trasition及其子类的内容。在这个例子中,我使用了FadeTransition并在StackPane上添加了MediaView,因此你可以淡出一个View并淡出另一个。

import javafx.animation.FadeTransition;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.stage.Stage;
import javafx.util.Duration;

public class VideoPlayer extends Application {

    private static final String MEDIA_URL = "http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv";
    @Override
    public void start(Stage primaryStage) {

        VBox root = new VBox();
        Media media = new Media(MEDIA_URL);
        Media yt    = new Media(MEDIA_URL);
        final MediaPlayer mediaPlayer = new MediaPlayer(media);
        final MediaPlayer mediaPlayer1 = new MediaPlayer(yt);
        MediaView mediaView2 = new MediaView(mediaPlayer1);
        mediaView2.setOpacity(0.0);
        MediaView mediaView3 = new MediaView(mediaPlayer);

        //root.getChildren().add(mediaView);

        Button play = new Button("Play");
        play.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent t) {
               mediaPlayer.play();

            }
        });

        Pane hBox = new StackPane();
        final FadeTransition fadeOut    = new FadeTransition(Duration.millis(3000), mediaView3);
        fadeOut.setFromValue(1.0);
        fadeOut.setToValue(0.0);
        final FadeTransition fadeIn     = new FadeTransition(Duration.millis(3000), mediaView2);
        fadeIn.setFromValue(0.0);
        fadeIn.setToValue(1.0);


        hBox.getChildren().add(mediaView3);
        hBox.getChildren().add(mediaView2);
        root.getChildren().add(play);
        Button stopBtn = new Button("Stop");
        stopBtn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent t) {
                Duration currentTime = mediaPlayer.getCurrentTime();
                mediaPlayer.stop();
                mediaPlayer1.setStartTime(currentTime);
                fadeOut.play();
                fadeIn.play();
                mediaPlayer1.play();
            }
        });
        root.getChildren().add(stopBtn);
        root.getChildren().add(hBox);
        Scene scene = new Scene(root, 1024, 768);
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }

}

希望有所帮助

帕特里克