MapOverlay draw()方法优化

时间:2011-09-26 14:10:25

标签: android google-maps

这是我的绘制方法。我在每条路上有755条道路和大约10个坐标。所以我需要两个for循环来绘制路径。它运行得太慢了。有关优化此代码的任何帮助。也许我不必创建一些对象。

    Projection projection = mv.getProjection();
    roadList = getRoadList();
    int length = roadList.length;

    for (int i = 0; i < length; i++) {
        Coordinate[] coordinateList = roadList[i].getCoordinateList();
        int numberOfCoordinates = coordinateList.length;
        Path path = new Path();

        for (int j = 0; j < numberOfCoordinates - 1; j++) {
            Coordinate coordinateFrom = coordinateList[j];
            Coordinate coordinateTo = coordinateList[j + 1];
            GeoPoint geoPointFrom = coordinateFrom.getGeoPoint();
            GeoPoint geoPointTo = coordinateTo.getGeoPoint();
            Point pointFrom = new Point();
            Point pointTo = new Point();
            projection.toPixels(geoPointFrom, pointFrom);
            projection.toPixels(geoPointTo, pointTo);
            path.moveTo(pointFrom.x, pointFrom.y);
            path.lineTo(pointTo.x, pointTo.y);

            if (!canvas.quickReject(path, EdgeType.BW)) {
                if (j == numberOfCoordinates - 2) {
                    canvas.drawPath(path, paint);
                }
            }               
        }           
    }

在get方法中没有任何计算。他们只是得到了一些预定义的变量。

1 个答案:

答案 0 :(得分:0)

我建议在Paths方法之外创建onDraw(),而不是每次调用它(可能是数百次)。呼叫之间的数据似乎没有变化。在获取数据时创建它们并将它们保存在某种集合中。然后在onDraw()中绘制它们。