按照 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);
在休息时,覆盖图块渲染良好,但是当缩放(捏合或通过控件)底层谷歌图块调整大小并被平滑替换时,但是 osmd 覆盖图没有调整大小。
结果:当放大时,保留在 View 中的图块开始重叠。相反,当缩小时,每个图块之间的间隙变得可见。
在我看来,第一步是对 GoogleTilesOverlay 进行子类化,以便我可以修改 draw() 方法。但是然后呢?
我用谷歌搜索了一下,发现了一些指向:
a) 在动画过程中短路 draw() 方法
b) 使用 Projector/Matrix 类来确定如何动态缩放叠加层
不幸的是,我不是 Android API 方面的专家,所以不确定该走哪条路……然后是如何最好地实现解决方案。
最佳答案
您需要对 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;
关于android - osmdroid GoogleTilesOverlay 平滑调整大小缩放,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10358068/