我试图在地图上显示一个png(可绘制),大约300个点。我正在从Sqlite表中检索坐标,将它们转储到游标中。当我尝试通过光标解析来显示它们时,需要绘制图像,每个图像大约0.5秒。我觉得这很慢,所以对如何提高性能的一些见解会有所帮助。以下是执行渲染的代码片段:
while (!mFlavorsCursor.isAfterLast())
{
Log.d("cursor",""+(i++));
point = new GeoPoint(
(int)(mFlavorsCursor.getFloat(mFlavorsCursor.getColumnIndex(DataBaseHelper.KEY_LATITUDE))*1000000),
(int)(mFlavorsCursor.getFloat(mFlavorsCursor.getColumnIndex(DataBaseHelper.KEY_LONGITUDE))*1000000));
overlayitem = new OverlayItem(point, "", "");
itemizedoverlay.addOverlay(overlayitem);
itemizedoverlay.doPopulate();
mFlavorsCursor.moveToNext();
}
mapOverlays.add(itemizedoverlay);
我试图隔离所有步骤,它看起来很慢:
itemizedoverlay.doPopulate();
这是我班级中的一个公共方法,它扩展了运行私有 populate()方法的ItemizedOverlay。
答案 0 :(得分:2)
在填充所有项目之前,请勿致电doPopulate()
。
答案 1 :(得分:1)
我知道这是一个非常古老的问题,但我遇到了类似的问题并找到了解决方案。
在ItemizedOverlay的子类中,执行以下操作:
@Override
public void draw(Canvas canvas,
MapView mapView,
boolean shadow) {
if (!shadow)
super.draw(canvas, mapView, shadow);
}
这样做是拦截绘制请求并禁用阴影图层的绘制。下一个效果是你的标记在投影到地图上时不会有漂亮的阴影,但是上面是MapView上滚动性能的显着增加。
您可以通过在标记PNG中包含阴影来补偿这一点(使用适当的alpha)。