マップビューに 1000 個のオーバーレイアイテムを表示するマップビューがあります。地図上に 2 つのオーバーレイ項目しか表示されていない場合でも、地図の動きは非常に遅くなります (巨大なズームが適用されます)。
オーバーレイアイテムの数が少ない場合にのみ、マップビューを最適化してより速く移動することは可能ですか?
ありがとう
マップビューに 1000 個のオーバーレイアイテムを表示するマップビューがあります。地図上に 2 つのオーバーレイ項目しか表示されていない場合でも、地図の動きは非常に遅くなります (巨大なズームが適用されます)。
オーバーレイアイテムの数が少ない場合にのみ、マップビューを最適化してより速く移動することは可能ですか?
ありがとう
いつもの穴に落ちたかもしれません。独自のカスタム オーバーレイを作成した場合は、addOverlay メソッドが設定されていないことを確認してください。Populate は、すべてのオーバーレイが追加されたときに最初に発生する必要があります。追加するたびに入力すると、多くのオーバーレイが重なり合ってしまいます。
このプロセスには 2 つのメソッドが使用されていることを確認してください。1 つは追加用、もう 1 つは入力用です。
public void addOverlay(CustomOverlayItem overlay) { mOverlays.add(overlay); }
public void populateOverlay() { populate(); }
それが問題でない場合は、ピンが画面範囲外にあるときにピンを動的に削除するか、ピンをグループ化することを検討する必要があります。この点に関して、あなたのために作業を行ったオープンソースプロジェクトがあると思います。
画面上にあるオーバーレイのみを描画するリンクhttp://onthefencedevelopment.com/blog/using-google-maps-your-android-applications-%E2%80%93-part-3-adding-place-markersを見つけました。まだテストしていませんが、有望なようです。
編集:それは動作します
MapView をサブクラス化し、dispatchDraw() をオーバーライドします。マップの中心またはズーム レベルの変化を検出します。
@Override
public void dispatchDraw(Canvas canvas)
{
super.dispatchDraw(canvas);
GeoPoint gpCenterPoint = getMapCenter();
int nZoomLevel = getZoomLevel();
// either diff't zoom level or change to center point?
if ( (gpCenterPoint.getLatitudeE6() != mCenterPoint.getLatitudeE6()) ||
(gpCenterPoint.getLongitudeE6() != mCenterPoint.getLongitudeE6()) ||
(nZoomLevel != mZoomLevel) )
{
// update pins here
updatePINS();
mZoomLevel = nZoomLevel;
mCenterPoint = gpCenterPoint;
}
}
void updatePINS()
{
int nLatitudeSpan = mapView.getLatitudeSpan();
int nLongitudeSpan = mapView.getLatitudeSpan();
// TODO insert/remove PINS as needed
}