Ваш код должен работать для холста, размер которого не изменяется. Но если вы изменяете размер холста, вам также необходимо соответствующим образом обновить координатное пространство холста. Например, для холста размером 500px, 500px вы можете достичь этого:
canvas.setSize("500px","500px");
canvas.setCoordinateSpaceHeight(500);
canvas.setCoordinateSpaceWidth(500);
в вашем случае вы определяете размер холста, используя процентные значения, вы можете использовать:
canvas.setSize("100%","100%");
canvas.setCoordinateSpaceHeight(Window.getClientHeight());
canvas.setCoordinateSpaceWidth(Window.getClientWidth());
, поскольку эти методы не принимают значения в процентах, вам необходимо вычислить ширину и высоту родительского контейнера в пикселях.