2

我有一个地图视图,在地图视图上显示 1000 个覆盖项。即使地图上只有两个覆盖项可见,地图也移动得很慢(应用了巨大的缩放)

如果只有少量的覆盖项可见,是否可以优化地图视图以更快地移动?

谢谢

4

3 回答 3

2

你可能掉进了通常的坑里。如果您制作了自己的 customoverlay,请确保您的 addOverlay 方法不会填充。填充应在添加所有叠加层后首先发生。如果您每次添加时都进行填充,您最终会得到许多叠加层。

确保它为此过程使用 2 种方法,1 种用于添加,1 种用于填充:

public void addOverlay(CustomOverlayItem overlay) { mOverlays.add(overlay); }

公共无效填充覆盖(){填充();}

如果这不是问题,那么您应该考虑在它们超出屏幕范围时动态删除引脚或将引脚分组在一起。我相信有一些开源项目已经为您完成了这方面的工作。

于 2012-08-02T12:23:52.557 回答
1

找到一个链接http://onthefencedevelopment.com/blog/using-google-maps-your-android-applications-%E2%80%93-part-3-adding-place-markers仅绘制屏幕上的叠加层. 尚未对其进行测试,但似乎很有希望。

编辑:它有效

于 2012-10-16T17:28:20.473 回答
0

子类 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
}
于 2012-08-02T13:02:13.503 回答