【问题标题】:Placeholder scaling issue with URLImage in landscape mode横向模式下 URLImage 的占位符缩放问题
【发布时间】:2016-02-07 05:27:11
【问题描述】:

我将占位符缩放到屏幕大小,如下所示。但是如果第一次在竖屏模式下观看,它只是占据屏幕,在横屏模式下不会覆盖整个屏幕。如果它是在横向模式下第一次查看,那么它看起来比纵向模式下的屏幕尺寸大。

我该如何解决这个问题。我检查了PropertyCross 演示,那里也存在同样的问题。

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 

【问题讨论】:

    标签: java codenameone


    【解决方案1】:

    我建议将其设置为样式的背景图像,并将背景行为设置为SCALE_TO_FILLSCALE_TO_FIT

    【讨论】:

    • 谢谢它的工作原理......但我这里还有一个问题。我设置了bgImage,当我想检索bgImage(即getBgImage)时,它给出了null。那是一个错误吗?我更新了我在上述问题中所做的事情
    • 您在此期间是否调用了 setUIID 或类似的东西?
    • 是否有人在此期间调用了这些 API 之一。您可以派生组件覆盖 setUIID 并在 super 调用上放置断点以发现是否发生这种情况...
    • 嗨,我不太明白?该怎么做?
    • 在图像消失的组件上,只需覆盖 setUIID() 方法并在那里放置一个断点以捕获该方法的调用者。
    【解决方案2】:

    您正在使用屏幕尺寸生成占位符图像,并且横向屏幕的宽度大于纵向。

    如果您想让图像具有响应性,则必须添加方向更改侦听器,如果您来自纵向,则该侦听器将下载另一个具有不同尺寸的横向图像,反之亦然。

    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));
    });
    

    【讨论】:

    • 感谢 diamond 它有效,但如果我不必为单个占位符使用 2 个图像,我会更喜欢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多