【发布时间】:2012-08-02 12:13:11
【问题描述】:
我有一个在地图视图上显示 1000 个覆盖项的地图视图。即使地图上只有两个覆盖项可见,地图也移动得很慢(应用了巨大的缩放)
如果只有少量的覆盖项可见,是否可以优化地图视图以更快地移动?
谢谢
【问题讨论】:
标签: android android-mapview itemizedoverlay overlayitem
我有一个在地图视图上显示 1000 个覆盖项的地图视图。即使地图上只有两个覆盖项可见,地图也移动得很慢(应用了巨大的缩放)
如果只有少量的覆盖项可见,是否可以优化地图视图以更快地移动?
谢谢
【问题讨论】:
标签: android android-mapview itemizedoverlay overlayitem
你可能掉进了平常的坑里。如果您制作了自己的 customoverlay,请确保您的 addOverlay 方法不会填充。填充应在添加所有叠加层后首先发生。如果每次添加时都进行填充,最终会得到许多叠加层。
确保它为此过程使用 2 种方法,一种用于添加,另一种用于填充:
public void addOverlay(CustomOverlayItem 覆盖) { mOverlays.add(覆盖); }
公共无效填充覆盖(){ 填充(); }
如果这不是问题,那么您应该考虑在引脚超出屏幕范围时动态移除引脚或将引脚分组在一起。我相信有一些开源项目已经为您完成了这方面的工作。
【讨论】:
找到一个链接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
}
【讨论】: