摘要:Android map 大量加載OVERLAY
原文來自stackoverflow Dave的回答:
http://stackoverflow.com/questions/2659770/android-map-performance-poor-because-of-many-overlays
I've done the following now and it works fast(er):
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
and in MyOverlay:
public void addOverlay(OverlayItem overlay) {
m_overlays.add(overlay);
}
public void populateNow(){
populate();
}
大部分populate()是寫在addOverlay的後面,就是這個動作造成大量加載圖標的時候很慢
在還沒把populate()分離前,我測試加載500個圖標,所需時間大概是12秒
現在用了Dave大的方法後,加載2000個圖標,只需要1~2秒
另外還有兩個地方可以些許改善系統的負擔
1.盡量把加載的圖片用小一點
可透過 http://tinypng.org/ 這類型的方式壓縮圖片的大小
2.關掉overlay的陰影效果
在自定義的overlay類中覆寫
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
try {
if(!shadow) {
super.draw(canvas, mapView, false);
}
} catch (Exception e) {
Log.e(this.toString(),e.toString());
}
}
以上若有錯誤或是其他的方法
都請給小弟個指教,一同進步,謝謝