为了减少处理器在地图上重新绘制路线的工作,我使用Path类。我想为一个ZoomLevel存储一个路径。
我将路径保存在SparseArray中,其中key = ZoomLevel
和代码看起来像这样
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
if (shadow){
return;
}
else
if(route==null){
return;
}
drawPath(mapView, canvas);
}
private void drawPath(MapView mv, Canvas canvas) {
Point point = new Point();
if (pathMap.get(gMapView.getZoomLevel())==null){
List<GeoPoint> list = null;
Projection p = mv.getProjection();
List<RouteMachine.Section> routeArray = route.getSections();
p.toPixels(routeArray.get(0).getPoints().get(0), point);
Point rememberThisPoint = new Point(point.x,point.y);
Path path = new Path();
path.moveTo(point.x,point.y);
for (RouteMachine.Section section : routeArray) {
list = section.getPoints();
for (int i=1; i < list.size(); i++) {
p.toPixels(list.get(i), point);
path.lineTo(point.x, point.y);
}
}
pathMap.put(gMapView.getZoomLevel(), path, rememberThisPoint);
}
else{
mv.getProjection().toPixels(route.getSections().get(0).getPoints().get(0), point);
pathMap.offset(gMapView.getZoomLevel(),point);
}
canvas.drawPath(pathMap.get(gMapView.getZoomLevel()),mPaint);
}
在不同的zoomLevels下,它起作用或不起作用。
级别发生变化,但路径看起来像上一级别的路径。我认为,因为zoomLevel有时会发生变化,然后再映射rapaints。路径计算在这两个动作之间起作用。 ZoomLewel已更改,但地图尚未绘制。
我怎样才能解决这个问题?
最佳答案
使用getZoomLevel()
测试缩放级别的问题是,在请求缩放更改后,它会立即开始返回新的缩放级别,但是地图图像会经历渐进式大小更改的动画,这需要一些时间才能完成。
但是,即使在动画过程中,getProjection().fromPixels()
也会返回正确的投影值,它可用于检查动画何时结束。
我使用以下代码进行测试:
pathInitialLonSpan = projection.fromPixels(0,mapView.getHeight()/2).getLongitudeE6() -
projection.fromPixels(mapView.getWidth(),mapView.getHeight()/2).getLongitudeE6();
它返回地图中心级别的经度跨度。该值将在缩放更改动画期间更改,并在zomm完成时保持不变。
我用它来验证动画结束的时间,然后构建路径。
问候。
关于android - 如何捕捉 map 大小调整的结尾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13378762/