Я использовал этот учебник http://mobiforge.com/developing/story/using-google-maps-android для отображения карты и установки события onTouch для отображения всплывающего сообщения (широта/долгота) при нажатии на определенную область. Теперь моя проблема в том, что всплывающее сообщение отображается в тот момент, когда я касаюсь экрана, даже если это перемещение карты? Я хочу отображать тост, только если точка касания и точка касания совпадают. Как мне это реализовать?
Android: как заставить onTouch работать как onClick?
Ответы (3)
Проверьте, установлен ли бит перемещения в MotionEvent.
if(event.getAction() & MotionEvent.ACTION_MOVE == MotionEvent.ACTION_MOVE)
person
Peter Knego
schedule
04.11.2010
Но по какой-то причине это не работает :( Я все еще получаю тост, отображаемый при касании.
- person Rohith Nandakumar; 04.11.2010
Вы должны распечатать все события и их флаги, а затем провести некоторое тестирование, чтобы увидеть, какие события генерируются на основе пользовательского ввода. Затем выберите стратегию для фильтрации событий.
- person Peter Knego; 04.11.2010
Используйте
(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
Нет,
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
У меня это не сработало :( Оно срабатывало всякий раз, когда я отпускал палец. Даже если я перетаскивал.
- person Rohith Nandakumar; 02.08.2011