Reputation: 13
I am trying to draw lines between points through an array using a for loop but I seem to be having a few issues. I create a for loop which loops through the array but when trying to use projection.toPixels(arraylist,point); it keeps throwing up an error. I have seen other people use it and they dont seem to get an error, please help:
the code i have written is below:
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
}*
Upvotes: 0
Views: 2218
Reputation: 406135
The method toPixels(GeoPoint, Point) in the type Projection is not applicable for the arguments (OverlayItem, Point)
You're getting this error because you're trying to pass an object of type OverlayItem
to a method that expects an object of type GeoPoint
. This doesn't work because OverlayItem
does not extend from GeoPoint
. It does have a getPoint()
method that returns the GeoPoint
of the overlay though, so you can use that.
In your code you'd just have to change the following two lines:
lineProjection.toPixels(overlayItemList.get(k), from);
lineProjection.toPixels(overlayItemList.get(k + 1), to);
Those lines should read
lineProjection.toPixels(overlayItemList.get(k).getPoint(), from);
lineProjection.toPixels(overlayItemList.get(k + 1).getPoint(), to);
Upvotes: 1