将叠加添加到MapView后没有滚动

时间:2011-11-15 13:29:27

标签: android overlay android-mapview

我正在努力解决以下问题: 我在mapview中添加了一个简单的叠加层。它没有绘制任何东西,只是用于检测滚动的帮助覆盖结束(参见response

以下是代码:

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;
                }
            }
        }
    }
}

如果我将此叠加层添加到我的mapview,则无法再滚动地图。以下是在mapview中添加和删除叠加层的代码:

@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 个答案:

答案 0 :(得分:4)

您正在为叠加层的触摸事件返回true。当您返回true时,触摸事件将停止级联到较低视图。因此,您的MapView永远不会收到它。如果触摸已完全处理并且您不想再执行任何操作,则只需要这样做。如果您想移动地图,可以尝试将return语句更改为return super.onTouchEvent(e, mapView);