2012-06-20 4 views
0

for 루프를 사용하여 배열을 통해 점 사이의 선을 그리려하고 있는데 몇 가지 문제가있는 것 같습니다. 나는 for 루프를 만들지 만 배열을 반복하지만 projection.toPixels (arraylist, point)를 사용하려고 할 때; 그것은 오류를 던지기를 계속한다. 나는 다른 사람들이 그것을 사용하고 오류가 발생하는 것 같다 해달라고 보았다, 도와주세요 :안드로이드 - 배열을 통해 점 사이의 선 그리기

을 내가 작성한 코드는 다음과 같습니다 :}

public class MyPositionOverlay extends ItemizedOverlay<OverlayItem> { 

public List<GeoPoint> geoPointsArrayList = new ArrayList<GeoPoint>(); 
public ArrayList<OverlayItem> overlayItemList = new ArrayList<OverlayItem>(); 
Context context; 
int listSize = overlayItemList.size(); 
//Vector <overlayItemList> vectorList; 
public MyPositionOverlay(Drawable marker, Context c) { 
    super(boundCenterBottom(marker)); 
    // TODO Auto-generated constructor stub 
    populate(); 
    context = c; 
} 
private final int mRadius = 5; 
Location location; 
public Location getLocation() { 
    return location; 
} 
public void setLocation(Location location) {; 
this.location = location; 
} 

public void addItem(GeoPoint point, String title, String snippet){ 
    OverlayItem newItem = new OverlayItem(point, title, snippet); 
    overlayItemList.add(newItem); 
    populate(); 
} 
@Override 
public void draw(Canvas canvas, MapView mapView, boolean shadow) { 
    Projection projection = mapView.getProjection(); 
    Double latitude = location.getLatitude()*1E6; 
    Double longitude = location.getLongitude()*1E6; 
    GeoPoint geoPoint; 
    geoPoint = new 
      GeoPoint(latitude.intValue(),longitude.intValue()); 
    GeoPoint prePoint = null, currentPoint = null; 
    Path linePath = new Path(); 
    Point screenCoords = new Point(); 
    Point screenCoords2 = new Point(); 
    Point lastPoint = new Point(); 
    Point linePoint = new Point(); 
    if (shadow == false) { 
     // Get the current location  
     // Convert the location to screen pixels  
     Point point = new Point(); 
     projection.toPixels(geoPoint, point); 
     RectF oval = new RectF(point.x - mRadius, point.y - mRadius, 
       point.x + mRadius, point.y + mRadius); 
     // Setup the paint 
     Paint paint = new Paint(); 
     paint.setARGB(250, 255, 255, 255); 
     paint.setAntiAlias(true); 
     paint.setFakeBoldText(true); 
     //Text set up 
     Paint textPaint = new Paint(); 
     textPaint.setColor(Color.BLACK); 
     Paint backPaint = new Paint(); 
     backPaint.setARGB(175, 50, 50, 50); 
     backPaint.setAntiAlias(true); 
     RectF backRect = new RectF(point.x + 2 + mRadius, 
       point.y - 3*mRadius, 
       point.x + 65, point.y + mRadius); 
     // Draw the marker  
     canvas.drawOval(oval, paint); 
     canvas.drawRoundRect(backRect, 5, 5, backPaint); 
     canvas.drawText("Here I Am", 
       point.x + 2*mRadius, point.y, 
       textPaint); 

     for (int j = 1; j < overlayItemList.size();j++){ 
      linePath.setLastPoint(4, j - 1); 
      linePath.lineTo(4, j); 
     } 
     linePath.close(); 
     canvas.drawPath(linePath, linePaint); 
    } // End of If statement 
    super.draw(canvas, mapView, shadow); 
} // End of draw method 
public void drawLine(MapView mapView){ 

    System.out.println("Drawing line"); 
    Path linePath = new Path(); 
    Canvas lineCanvas = new Canvas(); 
    Projection lineProjection = mapView.getProjection(); 


    //Line Settings 
    Paint linePaint = new Paint(); 
    linePaint.setStyle(Style.FILL); 
    linePaint.setStrokeWidth(2); 
    linePaint.setARGB(0, 0, 0, 255); 
    linePaint.setAntiAlias(true); 
    linePaint.setStrokeJoin(Paint.Join.ROUND); 
    linePaint.setStrokeCap(Paint.Cap.ROUND); 
    /****************************************************************************/ 

    for (int k = 0; k<overlayItemList.size(); k++){ 
     if(k == overlayItemList.size() -1){ 
      break; 
     } 
     Point from = new Point(); 
     Point to = new Point(); 

     lineProjection.toPixels(overlayItemList.get(k), from); 
     lineProjection.toPixels(overlayItemList.get(k + 1), to); 

     linePath.moveTo(from.x, from.y); 
     linePath.lineTo(to.x, to.y); 
    } 

    lineCanvas.drawPath(linePath, linePaint); 


}//End of drawLine method 

*

+0

내가 오류를 읽어야

lineProjection.toPixels(overlayItemList.get(k), from); lineProjection.toPixels(overlayItemList.get(k + 1), to); 

은 다음과 같습니다 메소드 toPixels (GeoPoint의, 포인트) 투영법은 인수에 적용 할 수 없습니다 (OverlayItem, Point) http://stackoverflow.com/questions/5243146/i-want-to-draw-path-between-multiple-geopoins의 코드를 사용하고 있습니다. 안드로이드,하지만 난 틀린 것을 볼 수 없다. – MurphyApps

+0

ih ave 도이 코드를 본 : http : //stackoverflow.com/questions/3036139/android-drawing-path-as-overlay-on-mapview 내 것과 같은 것, 내 arraylists ??? – MurphyApps

답변

1

메소드 toPixels을 (GeoPoint, Point)이 인수 (OverlayItem, Point)에 적용되지 않습니다. (OverlayItem, Point)

t의 객체를 전달하려고하기 때문에이 오류가 발생합니다. yy OverlayItemGeoPoint 유형의 개체를 예상하는 메서드에 적용됩니다. OverlayItemGeoPoint에서 확장되지 않으므로 작동하지 않습니다. 오버레이의 GeoPoint을 반환하는 getPoint() 메서드가 있으므로 사용할 수 있습니다. 코드에서

그냥 다음 두 줄 변경해야 할 것 : 그 선이

lineProjection.toPixels(overlayItemList.get(k).getPoint(), from); 
lineProjection.toPixels(overlayItemList.get(k + 1).getPoint(), to);