onTouchEvent никогда не вызывал MapActivity - PullRequest
3 голосов
/ 19 апреля 2011

У меня есть действие, которое расширяет MapActivity.Но когда я нажимаю на карту, onTouchEvent никогда не вызывается.Почему это так?

@Override
public boolean onTouchEvent(MotionEvent event) {
    Log.d("temp", "onTouchEvent");
    return true;
}

edit: у меня теперь есть два метода в custum, созданный ItemizedOverlay для отлова моих событий.Первый вызывается, когда я нажимаю на оверлей.Но второе (onTouchEvent) никогда не вызывается, когда я касаюсь карты.

@Override
    protected boolean onTap(int index) {
      OverlayItem item = mOverlays.get(index);
      this.movement = true;
      Log.d("temp", "overlayItem tapped" + item.getTitle());
      return true;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event, MapView mapView) {
        this.movement = false;
        Log.d("temp", "overlayItem tapped finish");
        return true;
    }

Ответы [ 3 ]

5 голосов
/ 19 апреля 2011

MapView, связанный с MapActivity, почти наверняка обработает представление для вас. Если вы посмотрите на документы для Activity#onTouchEvent(), то там написано: «Вызывается, когда событие сенсорного экрана не обрабатывается ни одним из представлений под ним».

http://developer.android.com/reference/android/app/Activity.html#onTouchEvent(android.view.MotionEvent)

Полагаю, что вы хотите сделать с этим событием касания, уже обработанным MapView, может быть, найти подходящее место, чтобы поместить его в этот код?

3 голосов
/ 19 апреля 2011

Вы должны переопределить dispatchTouchEvent

0 голосов
/ 01 июля 2011

Обработчик не выполняется.Я еще не нашел точную причину такого поведения.Вероятно, причина в том, что MapActivity не пересылает событие автоматически в зарегистрированный MapView или просто не получает уведомление о событии, поскольку событие движения фактически происходит в самом MapView, а не в его родительском объекте MapActivity.

Вместо этого можно либо зарегистрировать событие непосредственно в MapView mapView.setOnTouchListener (new OnTouchListener () {

public boolean onTouch(View v, MotionEvent event) {
  // TODO Auto-generated method stub
   return false;
  }
});

.., либо переопределить dispatchTouchEvent (MotionEvent) MapActivity.однако следует учитывать, что в этом случае следует соответствующим образом переслать событие.

...