У меня есть MapView, который будет содержать много наложений. Для этого я расширил класс Overlay, поскольку я слышал, что он имеет лучшую производительность, чем ItemizedOverlay (который вызывал заполнение для каждого элемента). Когда карта перемещается или увеличено, в MapActivity, я выбираю только видимый вводимый коэффициент и зову:MapView с Overlay имеет проблемы с производительностью
protected void RefreshOverlay() {
Log.e("||||||||||||||||||||||||||", "RefrashOverlay()");
mapOverlays.clear();
mapOverlays.add(new OverlayElements(zonesP,getApplicationContext()));
}
Класса OverlayElements расширяет Overlay и здесь я делаю все рисунки:
public void draw(Canvas canvas, MapView mapview, boolean shadow) {
super.draw(canvas, mapview, shadow);
int i;
int sz=zonesP.size();
int style;
ZoneProperties zone;
//paint.setAntiAlias(true);
pp = new Point();
int zoomLevelC=mapview.getZoomLevel();
Projection pr = mapview.getProjection();
for(i=0;i<sz;i++)
{
zone=zonesP.get(i);
if(zone.visible==true)
{
pr.toPixels(zone.point, pp);
xp = pp.x;
yp = pp.y;
if(zone.zoneSizePx<500)
{
//----------
Log.e("zone radious>>",zone.zoneSizePx+"<<");
int alfa;
style=(int)i%2;
Log.e("style>>",i+">>"+r[i]+" "+g[i]+" "+b[i]);
paint.setColor(Color.rgb(r[style],g[style],b[style]));
alfa=(18-zoomLevelC)*35;
if(alfa>255)
alfa = 200;
else
if(alfa<0) alfa = 20;
paint.setAlpha(alfa);
canvas.drawCircle(xp, yp, zone.zoneSizePx, paint);
}
if(zone.select!=0)
if(zone.vState==2)
canvas.drawBitmap(getDrawRes(zone.select,zone.eSizePx),xp,yp,null);
}
//----------------
}
}
Ну, это рисунок не так быстро :). Должен ли я вернуться ItemizedOverlay, и если да, то как я могу сделать звонок пополнения только один раз? Любая идея оптимизации? Спасибо!! :)
Во-первых, вы не называете 'populate()' на 'ItemizedOverlay', пока * все * элементов не готовы, а не для каждого элемента. Во-вторых, используйте Traceview, чтобы определить, где ваше время тратится, поэтому вы лучше знаете, как оптимизировать свой код. – CommonsWare
Ну, да, когда у меня есть похожие рисунки на карте, я вызываю только один раз populate(), но в основном у меня разные. Я уже использовал профилировщик и большую часть времени (на карте перемещаю или увеличиваю): BitmapFactory.nativeDecodeAsset, GC, DrawBitmap, GC. Спасибо за советы! :) – Misca
«когда у меня есть похожие рисунки на карте, я вызываю только один раз заселять(), но в основном у меня разные» - это не имеет значения. – CommonsWare