在ItemizedOverlay的draw方法中获取变量值的首选方法是什么?

时间:2011-05-13 01:41:27

标签: java android

使用GeoPoints的ArrayList,我想在地图上绘制点并用线连接它们。我有“点”部分工作,但没有线。我的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”在重写的“draw”方法中是空的,我无法弄清楚原因。更令人困惑的是,“颜色”是/不是/空,“颜色”和“地理点”都以相同的方式分配。有人可以推荐一个解决方案吗?

1 个答案:

答案 0 :(得分:1)

您要将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)));
        }

试一试,让我知道它是如何运作的。