Получить текущий OverlayItem рисуется - PullRequest
3 голосов
/ 08 июля 2010

Я хочу иметь возможность получить некоторую ссылку на текущий объект рисования

@Override
        public void draw(Canvas canvas, MapView mapView,boolean shadow) {
            //Log.i("DRAW","MARKER");
            super.draw(canvas, mapView, false);
        }

Выше приведен мой метод рисования, и я хочу расширить метод рисования, чтобы, например, написать заголовок под каждым элементом.Для этого потребуется метод .getTitle () из OverlayItem.Возможно, некоторое отслеживание объектов за пределами этого метода, но не уверен, куда его поместить ....

1 Ответ

0 голосов
/ 12 июля 2010

Я сделал нечто подобное.Я добавил несколько маркеров к MapView и затем соединил их со строкой.

У меня есть класс LineOverlay, который расширяет Overlay.В конструкторе он получает список элементов, которые должны быть соединены линиями.

Что-то вроде:

public LineOverlay(ItemizedOverlay<? extends OverlayItem> itemizedOverlay, int lineColor) {
    mItemizedOverlay = itemizedOverlay;
    colorRGB = lineColor;
    mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    mPaint.setColor(colorRGB);
    mPaint.setStrokeWidth(LINE_WIDTH);
}

и затем на onDraw() Я делаю это:

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
    if ( mItemizedOverlay.size() == 0 || mItemizedOverlay.size() == 1 )
        return;

    Projection projection = mapView.getProjection();

    int i = 0;

    while( i < mItemizedOverlay.size() - 1 ){
        OverlayItem begin = mItemizedOverlay.getItem(i);
        OverlayItem end = mItemizedOverlay.getItem(i+1);
        paintLineBetweenStations(begin,end,projection,canvas);
        i++;
    }

    super.draw(canvas, mapView, shadow);
}

private void paintLineBetweenStations(OverlayItem from, OverlayItem to, Projection projection, Canvas canvas){
    GeoPoint bPoint = from.getPoint();
    GeoPoint ePoint = to.getPoint();

    Point bPixel = projection.toPixels(bPoint, null);
    Point ePixel = projection.toPixels(ePoint, null);

    canvas.drawLine(bPixel.x, bPixel.y, ePixel.x, ePixel.y, mPaint);
}

В вашем случае вы можете сделать нечто подобное, создав SubtitleOverlay, который расширяет Overlay, который получает все элементы в конструкторе, а затем с помощью метода draw создает субтитры в правильной позиции.

...