Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android MapOverlay draw()方法优化_Android_Google Maps - Fatal编程技术网

Android MapOverlay draw()方法优化

Android MapOverlay draw()方法优化,android,google-maps,Android,Google Maps,这是我的画法。我有755条路,每条路大约有10个坐标。所以我需要两个for循环来绘制路径。它跑得太慢了。任何关于优化此代码的帮助。也许我不需要创建一些对象 Projection projection = mv.getProjection(); roadList = getRoadList(); int length = roadList.length; for (int i = 0; i < length; i++) { Coordinat

这是我的画法。我有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);
                }
            }               
        }           
    }
Projection=mv.getProjection();
roadList=getRoadList();
int length=roadList.length;
for(int i=0;i

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

我建议在
onDraw()
方法之外创建
路径
,而不是每次调用它(可能是数百次)。在两次通话之间,数据似乎没有变化。在获取数据时创建它们,并将它们保存在某种类型的集合中。然后把它们画进
onDraw()

好建议。但我不需要计算每个平移和缩放事件上的像素吗?或者我能捕捉到这些事件并计算像素吗?我在一秒钟内注释掉所有内容,然后放一个画线的方法。还是太慢了。嗯。。。。说得好。我不是在思考
MapView
。通常,当我这样做时,我会使用自定义覆盖项覆盖
Overlay
,或者使用内置的
ItemizedOverlay
覆盖
OverlayItem
并让每个对象确定其位置。我想我发现了问题。循环运行两次的估计时间:2毫秒。当我移动手指大约20像素时,draw()方法运行了10次。总估计时间:2秒。当我的手指在地图上时,我想我不应该画任何东西。我将尝试重写onTouch()事件。