После добавления Overlay to MapView нет прокрутки

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

Вот его код:

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:

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

Чем я ошибаюсь?

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

Спасибо.

1 ответ

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

licensed under cc by-sa 3.0 with attribution.