与ItemizedOverlay结合使用的地图叠加效果非常差

时间:2010-04-14 14:40:18

标签: android performance maps itemizedoverlay

我试图在地图上显示一个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。

2 个答案:

答案 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)。