Вы добавляете изображение в корневую панель в последней строке
final Image siImg = new Image();
...
RootPanel.get().add(siImg);
вместо добавления вашего холста. Таким образом, вы увидите только изображение вместо холста. Вы должны добавить холст на корневую панель и нарисовать оба изображения на холсте. Из соображений производительности лучше рисовать в буфер, а не прямо на холст. Вот небольшой пример:
Canvas canvas = Canvas.createIfSupported();
Canvas backBuffer = Canvas.createIfSupported();
Context2d context = canvas.getContext2d();
Context2d backBufferContext = backBuffer.getContext2d();
Image image1 = new Image("http://your.url.to/image.jpg");
image1.addLoadHandler(new LoadHandler() {
public void onLoad(LoadEvent event) {
// do anything you want here
doDraw();
}
});
Image image2 = new Image("http://your.url.to/image2.jpg");
image2.addLoadHandler(new LoadHandler() {
public void onLoad(LoadEvent event) {
// do anything you want here
doDraw();
}
});
RootPanel.get().add(canvas);
И метод draw будет выглядеть так:
public void doDraw() {
backBufferContext.setFillStyle(redrawColor);
backBufferContext.fillRect(0, 0, width, height);
ImageElement imageElement = ImageElement.as(image1.getElement());
backBufferContext.drawImage(imageElement, 0, 0, 1024, 768, 0, 0, 102, 76);
ImageElement imageElement = ImageElement.as(image2.getElement());
backBufferContext.drawImage(imageElement, 0, 0, 1024, 768, 102, 76, 102, 76);
context.drawImage(backBufferContext.getCanvas(), 0, 0);
}
Обратите внимание: Вы должны использовать глобальные переменные в этом примере. Измените это в соответствии со своими потребностями, передав аргументы / классы или определив переменные для всего класса. Также области рисования жестко закодированы в этом примере: это вы также должны изменить в соответствии с вашими потребностями.