我的应用程序中有一个地图视图。而且我必须在地图上显示超过 1,000 个叠加层。我有一个包含这些地方的列表。那么,我是否必须通过迭代列表中的项目来创建 1,000 个叠加对象?谁能给我一个有效的方法来做到这一点?
问问题
935 次
3 回答
0
Sanket 的做法是在添加每个点后填充点,这往往会滞后。一个更有效的方法可以这样做:
发生的事情是每次添加 GeoPoint 时都会填充 MapView。尝试将此添加到您的代码中:
在您遍历 GeoPoints 后,放置此代码
itemizedOverlay.populateNow();
并将您的 itemizedOverlay 更改为如下所示:
public void addOverlay(OverlayItem overlay) {
m_overlays.add(overlay);
}
public void populateNow()
{
populate();
}
@Override
protected OverlayItem createItem(int i) {
return m_overlays.get(i);
}
@Override
public int size() {
return m_overlays.size();
}
于 2012-11-02T06:53:20.480 回答
0
为此,您不必制作 1000 个叠加层。只需在 itemizedoverlay 中添加叠加层,然后在 mapoverlay 中添加此 itemizedoverlay 并在添加新的 itemizedoverlay 之前填充叠加层。
try
{
point = new GeoPoint((int) (Double.parseDouble(list.get(i).getLatitude()) * 1e6),(int) (Double.parseDouble(list.get(i).getLongitude()) * 1e6));
overlayitem = new OverlayItem(point, list.get(i).getLocationName()+"_@_"+list.get(i).getLatitude()+"_@_"+list.get(i).getLongitude()+"_@_yes", list.get(i).getAddress());
itemizedoverlay.addOverlay(overlayitem);
itemizedoverlay.populateOverlay();
mapOverlays.add(itemizedoverlay);
}
catch (Exception e)
{
Log.v("log",""+e.toString());
e.printStackTrace();
}
于 2012-11-02T05:23:43.100 回答
0
您可以只显示可见区域标记和不可见区域标记隐藏在下面的代码中;
mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
LatLngBounds bounds = mMap.getProjection().getVisibleRegion().latLngBounds;
for (Marker marker : markerArrayList) {
if (bounds.contains(marker.getPosition())) {
marker.setVisible(true);
} else {
marker.setVisible(false);
}
}
}
});
于 2018-12-28T07:29:32.537 回答