我的应用程序具有包含2张图像的表单。第一个是通过ImageAdapter
动态下载和舍入的,第二个来自主题。它们应用于Button
并彼此相邻,如下所示:
在我的表格中
我表单中的占位符定义为:
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()
)。我飞越了这个因为加载了很多图像。请参阅我的答案继续。
任何提示赞赏,
问候
答案 0 :(得分:1)
最终出现了
System.err.println("The placeholder in the ImageAdapter has a width of " + placeholderImage.getWidth());
不是来自此表单中的ImageAdapter
调用,而是来自之前实际下载并且第一次显示相同图像的表单。
所以我第二次使用相同的内部名称URLImage.createToStorage()
调用{在我的问题中查看Report.getFilename(chosenReport.getPhotoPath())
),因为文件已经下载并且存在于缓存中,因此不再按照书面形式下载在doc:
请注意,将要保存的图像是缩放图像,这意味着您在下载尺寸错误的图像时只需要很少的开销,尽管您会得到一些工件。
最后,如果我更改了内部名称,然后即使图像被下载,它也能完美地扩展: