4

第一次渲染它对我来说工作正常。但是,如果我在地图上更改任何内容或重新创建它,它就会损坏。

这是其外观的屏幕截图。 这里

这是我更改每页结果值后的屏幕截图。 这里

这是我的代码。

@UiField DivElement mapPanel;

private GoogleMap googleMap;

public void loadAllMarkers(final List<LatLng> markers)
{
    if(!markers.isEmpty())
    {
        final MapOptions options = MapOptions.create();
        options.setMapTypeId(MapTypeId.ROADMAP);

        googleMap = GoogleMap.create(mapPanel, options);

        final LatLngBounds latLngBounds = LatLngBounds.create();

        for(LatLng latLng : markers)
        {
        final MarkerOptions markerOptions = MarkerOptions.create();

        markerOptions.setPosition(latLng);
        markerOptions.setMap(googleMap);

        final Marker marker = Marker.create(markerOptions);
        latLngBounds.extend(marker.getPosition());

        }

        googleMap.setCenter(latLngBounds.getCenter());
        googleMap.fitBounds(latLngBounds);

    }
}

每当需要加载新结果时,我都会调用 loadAllMarkers() 方法。

有人可以指出我在这里做错了什么。

4

1 回答 1

2

这似乎来自以下内容(我从 Google+ 社区 - GWT Maps V3 API中提取):

布兰登·唐纳尔森 2013 年 3 月 5 日

我已经发生了这种情况并忘记了为什么会这样,但是 mapwidget.triggerResize() 会重置图块。这似乎发生在 onAttach 发生并且存在动画时,这意味着 div 开始变小并在侧面增加,但地图已经附加。在动画结束时,地图不会自动调整大小。我一直想研究自动调整大小,但我还没有时间攻击它。

在您的情况下,您将在完成更改后调用 googleMap.triggerResize() 。当我遇到完全相同的问题时,这解决了我的问题。我知道这有点晚了,但我希望它有帮助!

另一个答案是使用以下内容扩展 Map 小部件:

   @Override
protected void onAttach() {
    super.onAttach();
    Timer timer = new Timer() {

        @Override
        public void run() {
            resize();
        }
    };
    timer.schedule(5);
}

/*
 * This method is called to fix the Map loading issue when opening
 * multiple instances of maps in different tabs
 * Triggers a resize event to be consumed by google api in order to resize view
 * after attach.
 *
 */
public void resize() {
    LatLng center = this.getCenter();
    MapHandlerRegistration.trigger(this, MapEventType.RESIZE);        
    this.setCenter(center);
}
于 2013-07-29T17:19:29.323 回答