Нет прокрутки после добавления наложения в MapView - PullRequest
2 голосов
/ 15 ноября 2011

Сейчас я борюсь со следующей проблемой: я добавляю простой оверлей к моему просмотру карты.Он ничего не рисует, это просто наложение справки для определения, что прокрутка завершена (см. ответ )

Вот код этого кода:

public class ScrollDetectionOverlay extends Overlay
{
    private static GeoPoint lastLatLon = new GeoPoint(0, 0);
    private static GeoPoint currLatLon;

    protected boolean isMapMoving = false;

    private MapScrollingFinishedListener listener = null;

    public void setListener(MapScrollingFinishedListener listener)
    {
        this.listener = listener;
    }

    @Override
    public boolean onTouchEvent(MotionEvent e, MapView mapView)
    {
        super.onTouchEvent(e, mapView);
        if (e.getAction() == MotionEvent.ACTION_UP)
        {
            isMapMoving = true;
        }
        return true;
    }

    @Override
    public void draw(Canvas canvas, MapView mapView, boolean shadow)
    {
        super.draw(canvas, mapView, shadow);
        if (!shadow)
        {
            if (isMapMoving)
            {
                currLatLon = mapView.getProjection().fromPixels(0, 0);
                if (currLatLon.equals(lastLatLon))
                {
                    isMapMoving = false;
                    listener.onScrollingFinished();
                }
                else
                {
                    lastLatLon = currLatLon;
                }
            }
        }
    }
}

Если я добавлю это наложение в свой вид карты, я больше не смогу прокрутить карту.Ниже приведен код для добавления и удаления наложения из вида карты:

@Override
protected void onResume()
{
    super.onResume();
    if (!getMapView().getOverlays().contains(scrollDetectionOverlay))
    {
        scrollDetectionOverlay = new ScrollDetectionOverlay();
        scrollDetectionOverlay.setListener(this);
        getMapView().getOverlays().add(scrollDetectionOverlay);
    }
}

@Override
protected void onPause()
{
    super.onPause();
    if (getMapView().getOverlays().contains(scrollDetectionOverlay))
    {
        getMapView().getOverlays().remove(scrollDetectionOverlay);
        scrollDetectionOverlay = null;
    }
}

В чем я не прав?

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

Спасибо.

1 Ответ

4 голосов
/ 15 ноября 2011

Вы возвращаете true в событии касания для наложения. Когда вы возвращаете true, событие касания перестает каскадно переходить к нижним представлениям. Таким образом, ваш MapView никогда не получает его. Вы хотите сделать это, только если касание было полностью обработано, и вы не хотите больше ничего делать. Если вы хотите, чтобы карта двигалась, вы можете попробовать изменить оператор возврата на return super.onTouchEvent(e, mapView);

...