我正在尝试使用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 :(得分:1)
投影类型中的方法toPixels(GeoPoint,Point)不适用于参数(OverlayItem,Point)
您收到此错误是因为您尝试将类型为OverlayItem
的对象传递给期望类型为GeoPoint
的对象的方法。这不起作用,因为OverlayItem
不会从GeoPoint
延伸。它确实有一个getPoint()
方法,可以返回叠加层的GeoPoint
,因此您可以使用它。
在您的代码中,您只需更改以下两行:
lineProjection.toPixels(overlayItemList.get(k), from);
lineProjection.toPixels(overlayItemList.get(k + 1), to);
这些行应该是
lineProjection.toPixels(overlayItemList.get(k).getPoint(), from);
lineProjection.toPixels(overlayItemList.get(k + 1).getPoint(), to);