1

約300ポイントで地図上に1つの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に影を含めるだけでこれを補うことができます(適切なアルファを使用)。

于 2011-07-14T16:41:47.800 に答える