У меня есть MapView, который будет содержать много наложений. Для этого я расширил класс Overlay, так как слышал, что он имеет лучшую производительность, чем ItemizedOverlay (который вызывал populate для каждого элемента).
Когда карта перемещается или масштабируется, в MapActivity я выбираю только видимые элементы рисования и вызываю:
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, и если да, то как я могу сделать вызов заполнить только один раз? Есть идеи по оптимизации? Спасибо!! :)