我有一个名为fillViewer的ImageView,它设置为用图像填充屏幕。如果图像比窗口窄,则缩放以使其与窗口宽度匹配,并且如果它更宽则缩放以匹配高度,使得任何宽高比的图像可以填充任何宽高比的窗口。当我缩放窗口时,我也想要缩放背景图像。但是,偶尔在缩放窗口时,右侧有一个黑色小边缘未被图像填充。从我的测试来看,黑色条越大,窗口缩放越快,因此图像缩放似乎很难“跟上”窗口缩放。知道如何解决这个问题吗?以下是缩放图像的代码:
mainStage.heightProperty().addListener(new ChangeListener<Number>() {
@Override public void changed(ObservableValue<? extends Number> observable, Number oldH, Number newH){
if (!mainStage.isFullScreen()){
if (proportionalScale){
//windowBorders is the outer borders of the window, calculated by Stage size - Scene size
mainStage.setWidth( ( ( newH.doubleValue() - windowBorders.getHeight() ) * windowRatio) + windowBorders.getWidth() );
}
//fillRatio is the ratio of the background image, windowRatio is the ratio of the window (Ratio = Width/Height)
if (fillRatio < windowRatio){
fillViewer.setFitWidth(mainScene.getWidth());
}
else{
fillViewer.setFitHeight(mainScene.getHeight());
}
}
}
});
对于此查看器,setPreserveRatio和setSmooth都为true。将setSmooth设置为false不能解决问题。
答案 0 :(得分:0)
由于没有人回答,我想我会自己回答。当窗口向上或向下拖动太快时,图像没有时间缩放。在用户和程序员方面都有一些解决方法,但最后,我决定使用这个解决方案:
每当触发调整大小侦听器时,我都会将名为needsScaling的布尔值设置为true。然后我听一个事件(目前是鼠标释放,我可能会尝试监听任何鼠标点击或键盘事件)。当我检测到该事件并且needsScaling为true时,我将needsScaling设置为false并触发我的缩放代码。
如果有人有实际的解决方案而不是解决方法,我很高兴听到它。