Производительность наложения карты в сочетании с ItemizedOverlay очень низкая - PullRequest
1 голос
/ 14 апреля 2010

Я пытаюсь отобразить один 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 ();

Это открытый метод в моем классе, который расширяет ItemizedOverlay, который запускает закрытый populate () метод.

Ответы [ 2 ]

2 голосов
/ 14 апреля 2010

Не звоните doPopulate(), пока не заполните все пункты.

1 голос
/ 14 июля 2011

Я знаю, что это очень старый вопрос, но у меня была похожая проблема, и я нашел решение.

В вашем подклассе ItemizedOverlay сделайте следующее:

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

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

Это перехватывает запрос на рисование и отключает рисование теневого слоя. Следующим эффектом будет то, что ваши маркеры не будут иметь красивые тени, проецируемые на карту, но положительный эффект - это радикальное увеличение производительности прокрутки в MapView.

Вы можете компенсировать это, просто включив тени в PNG маркера (используя соответствующую альфу).

...