Java 在ItemizedOverlay';什么是画法?
使用地质点的阵列列表,我希望在地图上绘制点并用线连接它们。我有“点”部分在工作,但没有线条。我的ItemizedOverlay类:Java 在ItemizedOverlay';什么是画法?,java,android,Java,Android,使用地质点的阵列列表,我希望在地图上绘制点并用线连接它们。我有“点”部分在工作,但没有线条。我的ItemizedOverlay类: private class myItemizedOverlay extends ItemizedOverlay<OverlayItem> { private ArrayList<OverlayItem> items = new ArrayList<OverlayItem>(); private ArrayList&
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();
}
}
我发现在重写的“draw”方法中“geoPoints”是空的,我不知道为什么。更令人困惑的是,“颜色”是/不是/空的,“颜色”和“地质点”的分配方式相同。有人能推荐一个解决方案吗?您正在将
gp
分配给geoPoints
。我希望您在其他地方清理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)));
}
geoPoints=新的ArrayList(geoPoints.size());
对于(int i=0;i
试试看,让我知道它是如何工作的
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)));
}