我正在開發一個Android應用程序,該應用程序必須在設備當前位置顯示一些地圖上的「興趣點」。這很好。 另外,在我的應用程序中,用戶可以「點擊」一個「感興趣的地方」標記,並且應用程序將不得不繪製路線到該標記。Android中的繪製路線摺疊設備
我使用Google Directions api獲取路線,以及一個折線解碼器來獲取用戶和地點之間的GeoPoints。對於我的測試路線,谷歌給了我大約200個不同的GeoPoints。
所以,我有這樣一個類來添加這些GeoPoints:
public class RouteOverlay extends Overlay {
private GeoPoint gp1;
private GeoPoint gp2;
private int color;
public RouteOverlay(GeoPoint gp1, GeoPoint gp2, int color) {
this.gp1 = gp1;
this.gp2 = gp2;
this.color = color;
}
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
Projection projection = mapView.getProjection();
Paint paint = new Paint();
Point point = new Point();
projection.toPixels(gp1, point);
paint.setColor(color);
Point point2 = new Point();
projection.toPixels(gp2, point2);
paint.setStrokeWidth(5);
paint.setAlpha(120);
canvas.drawLine(point.x, point.y, point2.x, point2.y, paint);
super.draw(canvas, mapView, shadow);
}
}
我做什麼來繪製路線如下: 1)檢測onClick事件在地圖上的標記。 2)從這個事件中,我創建了一個新線程,在那裏我調用Google API。 3)一旦我有結果,我解析/轉換它在一個GeoPoint列表。 4)然後,我打電話給我的drawPath方法:
private void drawPath(List<GeoPoint> geoPoints, int color) {
mapOverlays.clear();
mapOverlays.add(myLocationOverlay);
mapOverlays.add(itemizedoverlay);
for (int i = 1; i < geoPoints.size(); i++) {
mapOverlays.add(new RouteOverlay(geoPoints.get(i - 1), geoPoints.get(i), color));
}
mapView.postInvalidate();
5)最後,我返回到UI線程。
此方法將清除地圖疊加列表(mapOverlays)。然後,在列表中添加當前位置和「感興趣的地點」疊加層。最後,添加路由覆蓋。
問題是,突然,工作veeery緩慢,最後崩潰。但LogCat中沒有消息。所以,我認爲這條路線上的30個覆蓋層+ 1 + 200多個電話太多了,無法處理。但我見過的教程這樣做...
有人可以告訴我,如果我做錯了什麼嗎? 在此先感謝。