많은 오버레이가 포함될 MapView가 있습니다. 이를 위해 Overlay 클래스를 확장했는데 ItemizedOverlay (모든 요소에 대해 채우기를 호출하는 것)보다 성능이 우수하다고 들었습니다. 내가 모든 도면을 여기오버레이가있는 MapView에는 성능 문제가 있습니다.
protected void RefreshOverlay() {
Log.e("||||||||||||||||||||||||||", "RefrashOverlay()");
mapOverlays.clear();
mapOverlays.add(new OverlayElements(zonesP,getApplicationContext()));
}
클래스 OverlayElements가 오버레이 확장 :지도를 이동하거나 확대 할 때 의 MapActivity에서, 난 단지 눈에 보이는 드로어 블을 선택하고 내가 전화
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를 다시 실행해야합니까? 그렇다면 어떻게 한 번만 채우기 호출을 할 수 있습니까? 모든 최적화 아이디어? 고맙습니다!! :)
먼저 항목의 * all *이 준비 될 때까지'ItemizedOverlay'에'populate()'를 호출하지 말고 각 항목을 준비하십시오. 둘째, Traceview를 사용하여 시간을 어디에서 사용했는지 확인하십시오. 따라서 코드를 최적화하는 방법을 더 잘 알 수 있습니다. – CommonsWare
글쎄, 예,지도에 비슷한 드로어 블이있을 때, 나는 한 번만 populate()를 호출하지만 대부분 다른 것들을 가지고 있습니다. 나는 이미 프로파일 러를 사용했고 대부분의 경우 (맵 이동 또는 확대/축소) : BitmapFactory.nativeDecodeAsset, GC, DrawBitmap, GC. 팁 주셔서 감사합니다! :) – Misca
"지도에서 비슷한 드로어 블을 사용하면 한 번만 채 웁니다 (하지만 대부분은 다른 것이 있습니다) - 그건 중요하지 않습니다. – CommonsWare