Java 在横向模式下URL图像的占位符缩放问题

Java 在横向模式下URL图像的占位符缩放问题,java,codenameone,Java,Codenameone,我将占位符缩放到屏幕大小,如下所示。但如果第一次在纵向模式下观看,它只会占据屏幕,而不会在横向模式下覆盖整个屏幕。如果第一次在横向模式下查看,则在纵向模式下,它会比屏幕大小大 如何解决此问题。我检查了演示,同样的问题也存在 private EncodedImage largePlaceholder; protected void initVars(Resources res) { Image tmp = Image.createImage(Display.getInstance().g

我将占位符缩放到屏幕大小,如下所示。但如果第一次在纵向模式下观看,它只会占据屏幕,而不会在横向模式下覆盖整个屏幕。如果第一次在横向模式下查看,则在纵向模式下,它会比屏幕大小大

如何解决此问题。我检查了演示,同样的问题也存在

private EncodedImage largePlaceholder;

protected void initVars(Resources res) {
    Image tmp = Image.createImage(Display.getInstance().getDisplayWidth(), Display.getInstance().getDisplayWidth() / 6 * 3, 0);
    largePlaceholder = EncodedImage.createFromImage(tmp, false);
}

findMainImg(f).setIcon(URLImage.createToStorage(largePlaceholder, getMainImg + "_0_ y", getMainImg, URLImage.RESIZE_SCALE_TO_FILL));
更新:

int sizethumb = 0;
int sizethumb1 = 0;
if (responsesImg.size() > 0) {

    sizethumb = largePlaceholder.getWidth();
    sizethumb1 = largePlaceholder.getHeight();
    findMainImg().setPreferredSize(new Dimension(sizethumb, sizethumb1));

    findMainImg(f).getAllStyles().setBgImage(URLImage.createToStorage(largePlaceholder, newsImgFilename + "_0_ y", responsesImg.get(0).get("image_url"), URLImage.RESIZE_SCALE));

    mainImageImgViewer = findMainImg(f).getAllStyles().getBgImage();
    System.out.println("beck0 " + mainImageImgViewer); //it gives null 

我建议将其设置为样式的背景图像,并将背景行为设置为
SCALE\u to\u FILL
SCALE\u to\u FIT

您正在使用屏幕大小生成占位符图像,横向屏幕的宽度大于纵向屏幕的宽度

如果你想使图像响应,你必须添加方向改变监听器,如果你来自纵向,它将下载另一个不同大小的横向图像,反之亦然

private EncodedImage largePlaceholderPortrait;
private EncodedImage largePlaceholderLandscape;
private boolean isPortrait = Display.getInstance().isPortrait();

protected void initVars(Resources res) {
    Image tmp = Image.createImage(Display.getInstance().getDisplayWidth(), Display.getInstance().getDisplayWidth() / 6 * 3, 0);
    Image tmp2 = Image.createImage(Display.getInstance().getDisplayHeight(), Display.getInstance().getDisplayHeight() / 6 * 3, 0);
    largePlaceholderPortrait = EncodedImage.createFromImage(isPortrait ? tmp : tmp2, false);
    largePlaceholderLandscape = EncodedImage.createFromImage(isPortrait ? tmp2 : tmp, false);
}

findMainImg(f).setIcon(URLImage.createToStorage(largePlaceholderPortrait,  isPortrait ? getMainImg + "_0_y_portrait" : getMainImg + "_0_y_landscape", getMainImg, URLImage.RESIZE_SCALE_TO_FILL));


f.addOrientationListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent evt) {
        findMainImg(f).setIcon(URLImage.createToStorage(largePlaceholderPortrait,  isPortrait ? getMainImg + "_0_y_portrait" : getMainImg + "_0_y_landscape", getMainImg, URLImage.RESIZE_SCALE_TO_FILL));
    }
});

//Java 8
f.addOrientationListener((evt) -> {
    findMainImg(f).setIcon(URLImage.createToStorage(largePlaceholderPortrait,  isPortrait ? getMainImg + "_0_y_portrait" : getMainImg + "_0_y_landscape", getMainImg, URLImage.RESIZE_SCALE_TO_FILL));
});

谢谢钻石它的作品,但我宁愿如果我不必使用一个占位符2图像。谢谢它的作品。。。但我还有一个问题。我设置了bgImage,当我想要检索bgImage(即getBgImage)时,它会给出null。那是虫子吗?我更新了我在上述问题中所做的工作。您是否在过渡期间调用了setUIID或类似的东西?是否有其他人在过渡期间调用了其中一个API。您可以派生组件覆盖setUIID,并在超级调用上放置一个断点,以发现是否发生了这种情况……嗨,我不太明白?如何做到这一点?在映像消失的组件上,只需重写setUIID()方法,并在那里放置一个断点以捕获该方法的调用方。