Android: как заставить onTouch работать как onClick?

Я использовал этот учебник http://mobiforge.com/developing/story/using-google-maps-android для отображения карты и установки события onTouch для отображения всплывающего сообщения (широта/долгота) при нажатии на определенную область. Теперь моя проблема в том, что всплывающее сообщение отображается в тот момент, когда я касаюсь экрана, даже если это перемещение карты? Я хочу отображать тост, только если точка касания и точка касания совпадают. Как мне это реализовать?


person Rohith Nandakumar    schedule 04.11.2010    source источник


Ответы (3)


Проверьте, установлен ли бит перемещения в MotionEvent.

if(event.getAction() & MotionEvent.ACTION_MOVE == MotionEvent.ACTION_MOVE)
person Peter Knego    schedule 04.11.2010
comment
Но по какой-то причине это не работает :( Я все еще получаю тост, отображаемый при касании. - person Rohith Nandakumar; 04.11.2010
comment
Вы должны распечатать все события и их флаги, а затем провести некоторое тестирование, чтобы увидеть, какие события генерируются на основе пользовательского ввода. Затем выберите стратегию для фильтрации событий. - person Peter Knego; 04.11.2010
comment
Используйте (getAction() & MotionEvent.ACTION_MASK), чтобы отфильтровать только действия. Распечатайте это (или зарегистрируйте). Результат означает: 0 - вниз, 1 - вверх, 2 - ход, 3 - отмена. - person Peter Knego; 04.11.2010

Это правильный способ сделать это? Я уверен, что есть лучший способ.

if (event.getAction() == 0) {                
    touchX = (int) event.getX();
    touchY = (int) event.getY();
}
if(event.getAction() == 1) {
  if(event.getX() == touchX && event.getY()== touchY){
    GeoPoint p = mapView.getProjection().fromPixels((int) event.getX(), (int)event.getY());
       Toast.makeText(getBaseContext(), 
         p.getLatitudeE6() / 1E6 + "," + 
         p.getLongitudeE6() /1E6 , 
         Toast.LENGTH_SHORT).show();
    }
}
person Rohith Nandakumar    schedule 04.11.2010
comment
Нет, event.getAction() == 0 не правильный путь. event.getAction() возвращает все флаги. Вы должны просто проверить один бит. - person Peter Knego; 04.11.2010

Это сработало для меня, когда я нажимаю и перетаскиваю ничего не происходит, но если я нажимаю и отпускаю, это сработало! точно так же, как поведение onClickListener.

  public boolean onTouch(View v, MotionEvent event) {
      if (event.getAction() == MotionEvent.ACTION_UP){
         // yer Code here ...........
      }

      return false;
  }
person Clint Barbosa    schedule 02.08.2011
comment
У меня это не сработало :( Оно срабатывало всякий раз, когда я отпускал палец. Даже если я перетаскивал. - person Rohith Nandakumar; 02.08.2011