Как сделать растяжку мультимедиа 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 и прочее.