如何使用多行优化平移和缩放mapview?

时间:2012-02-27 17:51:44

标签: android google-maps android-mapview

我有关于女巫的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行时,使用地图非常慢,特别是平移和缩放。我尝试将线绘制成一个叠加层并将其添加到地图中,但结果是相同的。任何人都知道如何优化它或以其他方式画线?我不需要在地图上优化添加项目,我需要在地图上更顺畅地移动。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

以另一种方式尝试,将数组传递给MapOverlay并在方法绘制中创建for循环,在这种情况下,您将只创建一个MapOverlay而不是500,并绘制500行使用一个MapOverlay,您将获得相同的结果。

如果你仍然不理解我的答案,请告诉我,我将用代码进行演示。