Android MapOverlay draw()方法优化
这是我的画法。我有755条路,每条路大约有10个坐标。所以我需要两个for循环来绘制路径。它跑得太慢了。任何关于优化此代码的帮助。也许我不需要创建一些对象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
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()事件。