如何使 JavaFX MediaView 将媒体拉伸和收缩到 fill/fit 父容器?
How do I make JavaFX MediaView stretch and shrink media to fill/fit parent container?
如何使 JavaFX MediaView 拉伸 和收缩 媒体到 fill/fit 父容器?
此处已有问题:
How do I make JavaFX MediaView stretch media to fill parent container?
以及此代码的解决方案:
<Pane fx:id="mediaViewPane">
<children>
<MediaView fx:id="videoView" fitHeight="${mediaViewPane.height}" fitWidth="${mediaViewPane.width}" layoutX="1.0" />
</children>
</Pane>
用于使视频变大以填充容器,但它不允许容器小于视频的大小,因此它不会缩小,它只是在控件落下时开始隐藏它们场景外
关于如何拉伸和缩小 MediaView 以适应的任何想法?
我已经做到了,尽管我对这是最好的方法不是很有信心。首先,正如 fabian 指出的那样,我需要将 MediaView
设置为不受管理,以便父级 Pane
可以调整为任何大小而不受 MediaView
约束:
<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);
如何使 JavaFX MediaView 拉伸 和收缩 媒体到 fill/fit 父容器?
此处已有问题:
How do I make JavaFX MediaView stretch media to fill parent container?
以及此代码的解决方案:
<Pane fx:id="mediaViewPane">
<children>
<MediaView fx:id="videoView" fitHeight="${mediaViewPane.height}" fitWidth="${mediaViewPane.width}" layoutX="1.0" />
</children>
</Pane>
用于使视频变大以填充容器,但它不允许容器小于视频的大小,因此它不会缩小,它只是在控件落下时开始隐藏它们场景外
关于如何拉伸和缩小 MediaView 以适应的任何想法?
我已经做到了,尽管我对这是最好的方法不是很有信心。首先,正如 fabian 指出的那样,我需要将 MediaView
设置为不受管理,以便父级 Pane
可以调整为任何大小而不受 MediaView
约束:
<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);