我的android应用程序中有一个地图,显示了许多标记(~20-50)。但是当我尝试滚动/缩放时,该应用程序表现非常差(在谷歌Android地图中我搜索了比萨饼的样本,并且还发现了大约20-50个结果,并且在缩放/滚动时我没有注意到任何特定的性能问题地图)。
这是我的(伪)代码:
onCreate() {
....
drawable = this.getResources().getDrawable(R.drawable.marker1);
itemizedOverlay = new MyItemizedOverlay(drawable,mapView);
...
callWebServiceToRetrieveData();
createMarkers();
}
createMarkers(){
for(elem:bigList){
GeoPoint geoPoint = new GeoPoint((int)(elem.getLat()*1000000), (int) (elem.getLon()*1000000));
OverlayItem overlayItem = new OverlayItem(geoPoint, elem.getName(), elem.getData());
itemizedOverlay.addOverlay(overlayItem);
mapOverlays.add(itemizedOverlay);
}
mapView.invalidate();
}
MyItemizedOverlay.addOverlay看起来像这样:
public void addOverlay(OverlayItem overlay) {
m_overlays.add(overlay);
populate();
}
答案 0 :(得分:8)
如果我理解这是如何正常工作的,那么在每次添加叠加后都不应该调用populate。一旦你全部添加它们就应该这样做。我认为发生的事情是您添加了第一个OverlayItem
并致电populate()
,然后将其添加到ItemizedOverlay.
然后您将第二个OverlayItem
添加到列表并调用{{ 1}}并将两个叠加层添加到populate()
,从而在叠加层中生成三个项目。所以我认为你的想法超过了你认为的20-50。
答案 1 :(得分:6)
我现在已经完成了以下工作并且工作得很快(呃):
createMarkers(){
for(elem:bigList){
GeoPoint geoPoint = new GeoPoint((int)(elem.getLat()*1000000), (int) (elem.getLon()*1000000));
OverlayItem overlayItem = new OverlayItem(geoPoint, elem.getName(), elem.getData());
itemizedOverlay.addOverlay(overlayItem);
}
itemizedOverlay.populateNow();
mapOverlays.add(itemizedOverlay); //outside of for loop
}
并在MyOverlay中:
public void addOverlay(OverlayItem overlay) {
m_overlays.add(overlay);
}
public void populateNow(){
populate();
}
现在更好/正确吗?或者可能的任何其他改进?
答案 2 :(得分:0)
昨晚我遇到了同样的问题,我的解决方案和你的一样。关于我如何调用填充方法,我感到很奇怪。
我和你有相同的代码,但我打电话给
speedyPopulate() {
populate();
}
MyOverlay类中的