マップ上のルートを再描画するプロセッサの作業を減らすために、Path クラスを使用します。そして、1 つの ZoomLevel に対して 1 つのパスを保存したいと考えています。Key = ZoomLevel の SparseArray にパスを保存し、コードは次のようになります
@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 では、機能するか機能しません。レベルが変わりますが、パスは前のレベルからのパスのように見えます。私は、ズームレベルがラペイントをマップする前に時々変更されるために起こると思います。そして、パス計算はこの 2 つのアクションの間で機能します。ZoomLewel は変更されましたが、地図はまだ塗りつぶされていません。どうすればこれを修正できますか?