按照Google Tile Wrapper示例,我已经使用osmdroid GoogleTilesOverlay实现了Google MapView。
com.google.android.maps.MapView googleMapView;
org.osmdroid.google.wrapper.MapView osmdMapView;
org.osmdroid.google.overlay.GoogleTilesOverlay tiles;
final MapView googleMapView = (com.google.android.maps.MapView.MapView) findViewById(R.id.plan_mapview);
osmdMapView = new org.osmdroid.google.wrapper.MapView(gMapView);
// snip Provider instantiation etc.
overlayTiles = new GoogleTilesOverlay(provider, getApplicationContext());
gMapView.getOverlays().add(overlayTiles);
静止时,叠加图块呈现正常但是当缩放(捏合或通过控件)时,底层Google图块会调整大小并被平滑替换,但osmd叠加层不会调整大小。
结果:当放大视图中剩余的切片开始重叠时。相反,当缩小时,每个图块之间的间隙变得可见。
在我看来,第一步是将GoogleTilesOverlay子类化,以便我可以修改draw()方法。那么呢?
我用Google搜索并发现了一些指示: a)在动画中间短路draw()方法 b)使用Projector / Matrix类确定如何动态缩放叠加层
不幸的是,我不是Android API的专家,所以不确定要走哪条路......然后如何最好地实施解决方案。
答案 0 :(得分:2)
您需要对GoogleTilesOverlay
中的draw方法稍作修改。
因为它绘制了一个恒定大小的(x,y,x+tileSizePx,y+tileSizePx).
简单而基本的方法,只需获得两个图块(x,y and x+1,y+1)
并减去像素差异。
查看以下代码:
final GeoPoint geoPointUL = new GeoPoint(
(int) (Mercator.tile2lat(y, zoomLevel) * 1E6),
(int) (Mercator.tile2lon(x, zoomLevel) * 1E6));
final GeoPoint geoPointLR = new GeoPoint(
(int) (Mercator.tile2lat(y+1, zoomLevel) * 1E6),
(int) (Mercator.tile2lon(x+1, zoomLevel) * 1E6));
Point pointUL=new Point(), pointLR=new Point();
pj.toPixels(geoPointUL, pointUL);
pj.toPixels(geoPointLR, pointLR);
tileSizePx = pointLR.x - pointUL.x;