在Android中绘制路线会折叠设备

在Android中绘制路线会折叠设备,android,android-mapview,Android,Android Mapview,我正在开发一个Android应用程序,它必须在地图视图上显示一些“感兴趣的地方”,以及设备的当前位置。这很有效。 此外,在我的应用程序中,用户可以“点击”一个“兴趣地点”标记,应用程序必须绘制一条到该标记的路线 我使用Google Directions api获取路线,并使用折线解码器获取用户和地点之间的地理点。对于我的测试路线,谷歌给了我大约200个不同的地理点 我有一个这样的类来添加这些地质点: public class RouteOverlay extends Overlay {

我正在开发一个Android应用程序,它必须在地图视图上显示一些“感兴趣的地方”,以及设备的当前位置。这很有效。 此外,在我的应用程序中,用户可以“点击”一个“兴趣地点”标记,应用程序必须绘制一条到该标记的路线

我使用Google Directions api获取路线,并使用折线解码器获取用户和地点之间的地理点。对于我的测试路线,谷歌给了我大约200个不同的地理点

我有一个这样的类来添加这些地质点:

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) 从那个事件中,我创建了一个新线程,在那里我调用了GoogleAPI。 3) 得到结果后,我将在地质点列表中对其进行解析/转换。 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();
private void drawPath(列出地质点,int-color){
mapOverlays.clear();
地图覆盖。添加(myLocationOverlay);
添加(itemizedoverlay);
对于(int i=1;i
5) 最后,我返回UI线程

此方法清除地图覆盖列表(mapOverlays)。然后,将当前位置和“兴趣点”覆盖添加到列表中。最后,添加路线覆盖

问题是,突然,速度非常慢,最终崩溃。但LogCat中没有消息。因此,我认为30个覆盖+1+200多个路线对于手机来说太难处理了。但是我看到的教程就是这样做的,所以

有人能告诉我我做错了什么吗?
提前谢谢。

我知道我做错了什么

当我调用drawPath函数时,在获得地质点列表后,我做了一个循环来检查每个点的坐标

for (int i = 0; i < geoList.size(); i++){
    Log.i("GEOPOINT " + i, geoList.get(i).toString());
    drawpath(geoList, Color.BLUE);
}
for(int i=0;i
drawPath函数被调用了N次,所以设备崩溃了,是我的错。 凌晨2点编程对代码不好