簡體   English   中英

如何使JavaFX MediaView拉伸和收縮媒體以填充/適合父容器?

[英]How do I make JavaFX MediaView stretch and shrink media to fill/fit parent container?

如何使JavaFX MediaView拉伸和收縮媒體以填充/適合父容器?

這里已經有一個問題:

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

和此代碼的解決方案:

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

用於使視頻更大以填充容器,但不允許容器小於視頻的大小,因此,它不會收縮,只是在控件落在場景外時才開始隱藏控件。

有什么想法可以伸展但也可以縮小MediaView以適合嗎?

我已經做到了這一點,盡管我對這是最好的方法並不超級自信。 首先,正如fabian指出的那樣,我需要將MediaView設置為不受管理,以便可以在不受MediaView約束的情況下將父Pane調整為任意大小:

<Pane fx:id="mediaViewPane" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="0.0" minWidth="0.0">
    <MediaView fx:id="mediaView" StackPane.alignment="CENTER" managed="false"/>
</Pane>

然后,在一次rezise事件中,我調整MediaView大小以適合父級,然后獲取視頻的實際大小並將其偏移到中心:

InvalidationListener resizeMediaView = observable -> {
    mediaView.setFitWidth(mediaViewPane.getWidth());
    mediaView.setFitHeight(mediaViewPane.getHeight());

    // After setting a big fit width and height, the layout bounds match the video size. Not sure why and this feels fragile.
    Bounds actualVideoSize = mediaView.getLayoutBounds();
    mediaView.setX((mediaView.getWidth() - actualVideoSize.getWidth()) / 2);
    mediaView.setY((mediaView.getHeight() - actualVideoSize.getHeight()) / 2);
};
mediaViewPane.heightProperty().addListener(resizeMediaView);
mediaViewPane.widthProperty().addListener(resizeMediaView);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM