Как сделать растяжку мультимедиа JavaFX MediaView для заполнения родительского контейнера?

Я пытаюсь сделать так, чтобы размеры моего видео автоматически растягивались, заполняли MediaView и сохраняли исходное соотношение сторон видео. По сути, я хочу, чтобы мой MediaPlayer соответствовал родительскому контейнеру при изменении размера и т. Д., Как почти все проигрыватели видео.

Если бы кто-нибудь мог пролить некоторый свет на то, как этого добиться, это было бы очень признательно, спасибо.

4 ответа

Более декларативный способ в файле.fxml:

...
<Pane fx:id="mediaViewPane">
  <children>
     <MediaView fx:id="videoView" fitHeight="${mediaViewPane.height}" fitWidth="${mediaViewPane.width}" layoutX="1.0" />
  </children>
</Pane>
...

Вы можете использовать синтаксис "${...}" для любого атрибута в ".fxml" для привязки выражений. Если вы хотите вызвать элемент пользовательского интерфейса, вы должны указать "fx:id". Например, в этом случае это fx:id="mediaViewPane".

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

Вот пример растяжения до содержащей сцены, и сцена задается размером "размер":

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()));

Я тоже боролся с этим, но я сделал это

mediaview.fitwidthproperty().bind(Stage.widthProperty());
mediaview.fitHeightproperty().bind(Stage.heightProperty());

и я работал на меня Медиа-просмотр воспроизводится в том же размере, что и сцена / окно. Надеюсь, поможет.

Просто понял, никто не ответил на это, поэтому я отвечу.

Просто установите медиаплеер fitWidthProperty на MediaView так:

player.fitWidthProperty().bind(mediaView.widthProperty());

и то же самое для высоты (если вы хотели), а также preserveRatio и прочее.

Другие вопросы по тегам