1

我正在尝试在大约 300 点的地图上显示一个 png(可绘制)。我正在从 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。

4

2 回答 2

2

doPopulate()在您填写所有项目之前不要打电话。

于 2010-04-14T15:50:34.927 回答
1

我知道这是一个非常古老的问题,但我遇到了类似的问题并找到了解决方案。

在 ItemizedOverlay 的子类中,执行以下操作:

@Override
public void draw(Canvas canvas,
        MapView mapView,
        boolean shadow) {

    if (!shadow)
        super.draw(canvas, mapView, shadow);
}

这样做是拦截绘制请求并禁用阴影层的绘制。下一个效果是您的标记不会在投影到地图上产生漂亮的阴影,但好处是 MapView 上的滚动性能大幅提高。

您可以通过在标记 PNG 中包含阴影(使用适当的 alpha)来弥补这一点。

于 2011-07-14T16:41:47.800 回答