我是GWT的新手,并且想知道为什么我无法让这个工作。
我正在尝试将大图像调整为较小的图像,同时使用以下代码保留纵横比:
Image image = new Image(myImageResource.getURL());
image.setPixelSize(newWidth, myImageResource.getHeight() * newWidth / myImageResource.getWidth());
但是会发生的是,myImageResource.getHeight()
和myImageResource.getWidth()
函数在我第一次单击CellList项(通过SingleSelectionModel处理)时返回0,该项执行上面的代码片段,并且完美地从第二次我点击相同的列表项。所有CellList项都会发生这种情况。我尝试了很多东西,却无法让它发挥作用。
有人可以帮我解决出了什么问题吗?
答案 0 :(得分:2)
当您在image
上进行操作时,实际上它没有添加到DOM。
在添加到DOM之后,您需要对其进行该操作。
Image image = new Image();
image.addLoadHandler(new LoadHandler() {
@Override
public void onLoad(LoadEvent event) {
//Do your operations on image .
image.getElement().getStyle().setVisibility(Style.Visibility.Visible);
}
});
image.getElement().getStyle().setVisibility(Style.Visibility.HIDDEN);
RootPanel.get().add(image);
image.setUrl(url);
您可能会怀疑 Style.Visibility.Hidden and Visible
原因:如果您在image(resize)
上进行更改,用户可以先查看原始图片,然后再调整图片大小。为了防止首先隐藏ige,请执行更改,最后 只是显示它 。
答案 1 :(得分:0)
You can get the correct height and width of the image only if the image is already rendered in the UI
。
我猜你是想在点击时渲染图像。如果是这样,对于第一次单击,图像尚未呈现。所以它返回0作为高度和宽度。首先单击它会返回正确的值,因为图像已经渲染。所以它完美无缺。
SOLUTION:将图像与CellList Items一起渲染,并使用CSS visible或display属性控制图像可见性。点击后,您可以使用计算出的高度和宽度启用图像可见性。