我有关于女巫的mapview活动我添加了多个叠加层,每个叠加层都与地图集之间有画线。作为源数据,我有ArrayList对象,并且对于每两个下一个位置,我都是dwaw line。
添加叠加层的方法
public void showPath(ArrayList<Location> log) {
int count = 0;
mapView.getOverlays().clear();
for (int i = 0; i < (log.size() - 1); i++) {
GeoPoint point = new GeoPoint((int) (log.get(i).getLatitude() * 1E6),(int) (log.get(i).getLongitude() * 1E6));
GeoPoint point2 = new GeoPoint((int) (log.get(i + 1).getLatitude() * 1E6),(int) (log.get(i + 1).getLongitude() * 1E6));
MapOverlay mapOvlay = new MapOverlay(point, point2); //vytvori overlay s carou mezi body
mapView.getOverlays().add(mapOvlay);
count++;
}
app.getToast("mumbers of read / display items: " + Integer.toString(orgSize) + " / " + Integer.toString(count));
Log.d(TAG, "mumbers of read / display items: " + orgSize + " / " + count);
mapView.setSatellite(true);
GeoPoint point0 = new GeoPoint((int) (log.get(0).getLatitude() * 1E6),(int) (log.get(0).getLongitude() * 1E6)); //vycentruje mapu na pocatek zaznamu
MapController mapController = mapView.getController();
mapController.setCenter(point0);
mapView.setEnabled(true);
}
这是MapOverlay中的draw()方法,它扩展了Overlay
@Override
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) {
super.draw(canvas, mapView, shadow);
Paint paint;
paint = new Paint();
paint.setColor(Color.BLUE);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(6);
paint.setAntiAlias(true);
Point pt1 = new Point();
Point pt2 = new Point();
Projection projection = mapView.getProjection();
projection.toPixels(Gpt1, pt1);
projection.toPixels(Gpt2, pt2);
canvas.drawLine(pt1.x, pt1.y, pt2.x, pt2.y, paint);
return true;
}
问题是当我绘制大约500行时,使用地图非常慢,特别是平移和缩放。我尝试将线绘制成一个叠加层并将其添加到地图中,但结果是相同的。任何人都知道如何优化它或以其他方式画线?我不需要在地图上优化添加项目,我需要在地图上更顺畅地移动。 提前谢谢。
答案 0 :(得分:0)
以另一种方式尝试,将数组传递给MapOverlay
并在方法绘制中创建for循环,在这种情况下,您将只创建一个MapOverlay
而不是500,并绘制500行使用一个MapOverlay
,您将获得相同的结果。
如果你仍然不理解我的答案,请告诉我,我将用代码进行演示。