如何在屏幕上绘制多个地图叠加层?

时间:2012-03-26 14:36:33

标签: java android google-maps overlay

我有一个程序,我想在两点之间划一条线。然后我想在另外两点之间绘制另一条线。当我画一条线时,它会移除前一条线。我试过让两条线都有不同的叠加层,但它仍然会移除旧线并放入新线。我是否可以阻止这种情况的发生?如何使所有叠加层保持不变?任何帮助将不胜感激。

Activity类中的Overlay类。

这是在onKeyDown()

case KeyEvent.KEYCODE_8:
            twoPoints.add(a);
            twoPoints.add(b);

            MapOverlay newOverlay = new MapOverlay();
            listOfOverlays = mapView.getOverlays();
            listOfOverlays.add(newOverlay);

            mapView.postInvalidate();
            System.out.println("Test overlays 1 Point");

            break;

        case KeyEvent.KEYCODE_9:
            twoPoints.remove(1);
            twoPoints.add(c);

            MapOverlay newOverlay1 = new MapOverlay();
            listOfOverlays.add(newOverlay1);
            mapView.postInvalidate();

            System.out.println("Test Overlays 2 Point");
            break;

这是Overlay课程:

   public class MapOverlay extends com.google.android.maps.Overlay
   {        
    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow)
    {       
        super.draw(canvas,mapView,shadow);

        //-- Create new paint object --
        Paint mPaint = new Paint();
        mPaint.setDither(true);
        mPaint.setColor(Color.RED);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        mPaint.setStrokeWidth(2);

        //System.out.println("Point 1");


            //System.out.println("Point 2");

            for(int i =0; i < twoPoints.size()-1;i++)
            {
                Point screenPt1 = new Point();
                mapView.getProjection().toPixels(twoPoints.get(i), screenPt1);

                Point screenPt2 = new Point();
                mapView.getProjection().toPixels(twoPoints.get(i+1), screenPt2);

                canvas.drawLine(screenPt1.x, screenPt1.y, screenPt2.x, screenPt2.y, mPaint);

                System.out.println("Point 3");
            }   

        //mapView.invalidate();
    }
}

一段时间以来我一直很困惑。

2 个答案:

答案 0 :(得分:0)

twoPoint 在哪里定义?问题似乎是两个Overlays都使用相同的点 twoPoint 数组来完成他们的工作。

答案 1 :(得分:0)

Eyespyus在正确的轨道上问题是我在活动中有Overlay类并且正在更改两者都使用的数组。将课程移到活动之外可以解决问题。

这是一个非常愚蠢的错误,我感谢大家花时间看这个,我对Android很新。