Как нарисовать несколько оверлеев карты на экран? - PullRequest
0 голосов
/ 26 марта 2012

У меня есть программа, в которой я хочу провести линию между двумя точками. Затем я хочу провести еще одну линию между двумя другими точками. Когда я рисую одну линию, она удаляет предыдущую линию. Я попытался сделать обе строки разными наложениями, но он все равно удаляет старую строку и вставляет новую. Могу ли я предотвратить это и как заставить все наложения остаться? Любая помощь будет принята с благодарностью.

Класс Overlay внутри класса Activity.

Это в 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 голосов
/ 06 апреля 2012

Eyespyus был на правильном пути, проблема была в том, что у меня был класс Overlay в упражнении и я изменял массив, который оба использовали. Перемещение класса за пределы деятельности решило проблему.

Это была действительно глупая ошибка, и я благодарю всех, что нашли время взглянуть на это, я очень новичок в Android.

0 голосов
/ 27 марта 2012

Где определяется twoPoint ?Проблема заключается в том, что оба оверлея используют один и тот же массив точек twoPoint для своей работы.

...