我正在努力解决以下问题: 我在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方法将被调用,调用和调用,用户无需做任何事情。有什么原因吗?
谢谢。
答案 0 :(得分:4)
您正在为叠加层的触摸事件返回true
。当您返回true时,触摸事件将停止级联到较低视图。因此,您的MapView
永远不会收到它。如果触摸已完全处理并且您不想再执行任何操作,则只需要这样做。如果您想移动地图,可以尝试将return语句更改为return super.onTouchEvent(e, mapView);