Как сделать так, чтобы Overlay отображался выше canvas.drawLine в API карты Android


Я использовал метод draw() моего класса SitesOverlay, который расширяет ItemizedOverlay<OverlayItem> для рисования некоторых линий. Теперь я также добавляю несколько изображений на карту в качестве наложения, добавляя это изображение к List<OverlayItem> во многих разных точках.
Теперь происходит то, что везде, где линия (нарисованная с использованием метода draw()) и значок изображения перекрываются , линия рисуется поверх наложенного изображения.
Как сделать так, чтобы накладываемое изображение располагалось поверх линии?

Редактировать: я использую populate(), чтобы поместить все мои наложения на карту, как только я добавлю их в список. Можно ли как-то вызвать метод populate после использования метода draw()? Я попытался поместить populate в метод draw(), но приложение перестало работать... как-то иначе?


person Urban    schedule 02.03.2011    source источник


Ответы (2)


Здесь я делюсь своим источником

public void draw(Canvas canvas, MapView mapView, boolean shadow) {
        super.draw(canvas, mapView, shadow);
        try {

            for (int i = 0; i < size(); i++) {

                OverlayItem item = getItem(i);
                String driverName = item.getSnippet();

                Data.activlyShownDrivers.add(driverName);

                Point screenPts = new Point();
                mapView.getProjection().toPixels(item.getPoint(), screenPts);

                Bitmap bmp = null;
                Context ctx = ShowAll.getContext();
                long angle = (long) Double.parseDouble(item.getTitle());

                // ---add the marker---

                    bmp = BitmapFactory.decodeResource(ctx.getResources(),
                            R.drawable.img1);


                Paint paint = new Paint();
                paint.setColor(Color.BLACK);
                paint.setStyle(Style.FILL_AND_STROKE);

                canvas.drawBitmap(bmp, screenPts.x, screenPts.y, null);
                canvas.drawText(driverName, screenPts.x, screenPts.y, paint);

            }
            // }
        } catch (Exception e) {
            try {
                Log.e(Data.LOG, e.getMessage());
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }

    }
person Rohit Mandiwal    schedule 02.03.2011
comment
хорошо.. в вашем коде вы добавляете изображение в методе рисования. Но я добавляю изображения в список overlayItem. Это добавление в список происходит в конструкторе класса, который имеет метод draw() в качестве одного из своих методов... не могли бы вы предоставить решение, связанное с этим? Поскольку нужно добавить много оверлейных изображений, лучше всего добавить их в список элементов оверлея в его конструкторе. Это не испортит ситуацию. Было бы здорово, если бы мне не пришлось перемещать все мои изображения из конструктора в мой метод рисования. - person Urban; 02.03.2011
comment
Можете ли вы ответить, пожалуйста, и объясните свой код. Вы заполняли () свои оверлеи перед использованием draw ()? Если у вас уже есть оверлеи, то что такое img1? плиз нужна помощь. - person Urban; 03.03.2011

Ну, получается, что если вы используете метод рисования, то все, что вы нарисуете с его помощью, будет нарисовано поверх ваших наложений. Это связано с тем, что draw() вызывается каждый раз, когда вы перетаскиваете/масштабируете или делаете что-либо с картой, а наложения заполняются только в начале... поэтому линии, нарисованные с помощью draw(), всегда будут появляться поверх наложений..

person Urban    schedule 19.03.2011