如何使JavaFX MediaView拉伸媒体填充父容器?

use*_*525 9 java media javafx

我正在尝试让我的视频尺寸自动拉伸并填充MediaView并保持视频的原始宽高比.基本上,我希望我的MediaPlayer适合调整大小等父容器,就像所有视频播放器一样.

如果有人能够阐明如何实现这一目标,那将非常感谢,谢谢.

kbi*_*kar 7

这是拉伸到包含场景的示例,场景由尺寸"尺寸"设置:

final MediaPlayer videoPlayer = new MediaPlayer(
    new Media(new File(videoPath).toURI().toString()));
MediaView mv = new MediaView(videoPlayer);
DoubleProperty mvw = mv.fitWidthProperty();
DoubleProperty mvh = mv.fitHeightProperty();
mvw.bind(Bindings.selectDouble(mv.sceneProperty(), "width"));
mvh.bind(Bindings.selectDouble(mv.sceneProperty(), "height"));
mv.setPreserveRatio(true);

setScene(new Scene(new Group(mv), size.getWidth(), size.getHeight()));
Run Code Online (Sandbox Code Playgroud)


sch*_*l11 7

".fxml"文件中更具说明性的方式是:

...
<Pane fx:id="mediaViewPane">
  <children>
     <MediaView fx:id="videoView" fitHeight="${mediaViewPane.height}" fitWidth="${mediaViewPane.width}" layoutX="1.0" />
  </children>
</Pane>
...
Run Code Online (Sandbox Code Playgroud)

您可以对".fxml"中的任何属性使用"$ {...}"语法进行表达式绑定.如果要调用UI元素,则必须提供"fx:id".例如,在这种情况下,它是fx:id ="mediaViewPane".

因此,您不必关心代码中的UI内容.对我来说它有点清洁.


use*_*525 1

刚刚发现没有人回答这个问题,所以我来回答一下。

只需将媒体播放器的 fitWidthProperty 设置为 MediaView 的 fitWidthProperty 即可:

player.fitWidthProperty().bind(mediaView.widthProperty());
Run Code Online (Sandbox Code Playgroud)

高度也一样(如果你愿意的话),并且还保留比率和其他东西。

  • 这段代码似乎是错误的。MediaPlayer 没有该属性。https://docs.oracle.com/javase/8/javafx/api/javafx/scene/media/MediaPlayer.html (3认同)