为什么占位符的宽度不在URLImage(Codename One)中

时间:2017-02-23 05:06:34

标签: codenameone

我的应用程序具有包含2张图像的表单。第一个是通过ImageAdapter动态下载和舍入的,第二个来自主题。它们应用于Button并彼此相邻,如下所示:

Part of app layout

在我的表格中

我表单中的占位符定义为:

int imageWidth = (int) (Display.getInstance().getDisplayWidth() / 2.5);
EncodedImage placeholder = EncodedImage.createFromImage(Image.createImage(
            imageWidth,
            imageWidth,
            ParametresGeneraux.accentColor), true);

我在按钮上应用的图像是这样创建的:

reportImage = URLImage.createToStorage(placeholder,
            Report.getFilename(chosenReport.getPhotoPath()),
            chosenReport.getPhotoPath(),
            ParametresGeneraux.RESIZE_SCALE_WITH_ROUND_MASK
    );

然后我就这么做了

        System.err.println("The placeholder in FORM has a width of " + placeholder.getWidth()); // 432

我从FORM中获得占位符的宽度为432。

但是来自ImageAdapter

public final static URLImage.ImageAdapter RESIZE_SCALE_WITH_ROUND_MASK =   new URLImage.ImageAdapter() {
    @Override
    public EncodedImage adaptImage(EncodedImage downloadedImage, EncodedImage placeholderImage) {
        System.err.println("The placeholder in the ImageAdapter has a width of " + placeholderImage.getWidth());
       // ...
    }
});

我从ImageAdapter中获得的占位符宽度与值200不同。

我应该在哪里查看错误,因为占位符宽度在两种方法中都应该相同,不应该吗?

修改2017-02-23:重要提示 在显示此表单之前,所涉及的图像已经第一次以另一种形式下载,具有不同的大小。实际上,不会触发来自ImageAdapter的消息(请参阅System.err())。我飞越了这个因为加载了很多图像。请参阅我的答案继续。

任何提示赞赏,

问候

1 个答案:

答案 0 :(得分:1)

最终出现了

System.err.println("The placeholder in the ImageAdapter has a width of " + placeholderImage.getWidth());

控制台中显示的

不是来自此表单中的ImageAdapter调用,而是来自之前实际下载并且第一次显示相同图像的表单。

所以我第二次使用相同的内部名称URLImage.createToStorage()调用{在我的问题中查看Report.getFilename(chosenReport.getPhotoPath())),因为文件已经下载并且存在于缓存中,因此不再按照书面形式下载在doc

  

请注意,将要保存的图像是缩放图像,这意味着您在下载尺寸错误的图像时只需要很少的开销,尽管您会得到一些工件。

最后,如果我更改了内部名称,然后即使图像被下载,它也能完美地扩展:

enter image description here