2011-09-26 82 views
1

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

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方法中没有任何计算。他们只是获得一些预定义的变量。

回答

0

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

+0

好的建议。但是,我不需要计算每个平移和缩放事件激发的像素?或者我可以捕捉这些事件并计算像素? –

+0

我在第二个注释掉了所有内容,只是放了一个画线方法。它仍然太慢。 –

+0

嗯....好点。我没有考虑'MapView'。通常,当我这样做时,我会用自定义覆盖项目覆盖'Overlay',或者使用内置的'ItemizedOverlay'和'OverlayItem'并让每个对象确定它的位置。 – DeeV