2011-05-13 2 views
0

GeoPoint의 ArrayList를 사용하여지도에 점을 그려서 선으로 연결하려고합니다. "포인트"파트가 작동하지만 라인은 작동하지 않습니다. 내 ItemizedOverlay 클래스 :ItemizedOverlay의 그리기 방법에서 변수 값을 가져 오는 가장 좋은 방법은 무엇입니까?

private class myItemizedOverlay extends ItemizedOverlay<OverlayItem> 
{ 
    private ArrayList<OverlayItem> items = new ArrayList<OverlayItem>(); 
    private ArrayList<GeoPoint> geoPoints = new ArrayList<GeoPoint>(); 
    private int color; 

    public myItemizedOverlay (Drawable marker, ArrayList<GeoPoint> gp, int c) 
    { 
     super(marker); 
     geoPoints = gp; 
     color = c; 

     boundCenter(marker); 

     for (int i = 0; i < geoPoints.size() - 1; i++) 
     { 
      items.add(new OverlayItem(geoPoints.get(i))); 
     } 

     populate(); 
    } 

    @Override 
    protected OverlayItem createItem(int i) 
    { 
     return items.get(i); 
    } 

    @Override 
    public void draw(Canvas canvas, MapView mapView, boolean shadow) 
    { 
     super.draw(canvas, mapView, false); 

     Paint paint = new Paint(); 
     paint.setColor(color); 
     paint.setDither(true); 
     paint.setAntiAlias(true); 
     paint.setStyle(Paint.Style.FILL_AND_STROKE); 
     paint.setStrokeJoin(Paint.Join.ROUND); 
     paint.setStrokeCap(Paint.Cap.ROUND); 
     paint.setStrokeWidth(2); 

     Point p1 = new Point(); 
     Point p2 = new Point(); 

     for (int i = 1; i < geoPoints.size() - 1; i++) 
     { 
      mapView.getProjection().toPixels(geoPoints.get(i), p1); 
      int x1 = p1.x; 
      int y1 = p1.y; 

      mapView.getProjection().toPixels(geoPoints.get(i - 1), p2); 
      int x2 = p2.x; 
      int y2 = p2.y; 

      canvas.drawLine(x1, y1, x2, y2, paint); 
     } 
    } 

    @Override 
    public int size() 
    { 
     return items.size(); 
    } 
} 

호출 :

myItemizedOverlay mo = new myItemizedOverlay(marker, geoPoints, color); 
mapView.getOverlays().add(mo); 

나는 "geoPoints는"오버라이드 "그리는"방법 비어 있음을 찾는거야, 나는 이유를 알아낼 수 없습니다. 더 혼란스럽게도 "색상"은 비/비어 있고 "색상"과 "지리적 포인트"는 같은 방식으로 지정됩니다. 아무도 해결책을 추천 할 수 있습니까?

답변

1

gpgeoPoints에 할당하고 있습니다. 나는 다른 곳에서 당신이 gp을 비우는 것을 기대합니다. 복사본을 만들어야합니다 :

geoPoints = new ArrayList<GeoPoint>(geoPoints.size()); 
for (int i = 0; i < geoPoints.size() - 1; i++) 
     { 
      geoPoints.add(gp.get(i)); 
      items.add(new OverlayItem(geoPoints.get(i))); 
     } 

어떻게 작동하는지 알려주세요.

+0

네 말이 맞아, 그건 내 임무 운영자 야. 감사 Femi! – wirbly

관련 문제