Я тоже столкнулся с этой проблемой.
Идея rohit mandiwal хороша, но если пользователь, например, увеличит, а затем уменьшит масштаб до того же уровня, нежелательное событие касания все равно может произойти.
Решением этой проблемы является обнаружение изменения уровня масштабирования в onTouchEvent()
, а не в onTap()
. Я попробовал это, и это похоже на работу.
Вот мой код:
private class LocationOverlay extends ItemizedOverlay<OverlayItem> {
private int lastZoomLevel;
private boolean onTapAllowed;
public LocationOverlay(...) {
//...
lastZoomLevel=mapView.getZoomLevel();
}
@Override
public boolean onTouchEvent(MotionEvent motionEvent, MapView mapView) {
if (mapView.getZoomLevel()!=lastZoomLevel) {
lastZoomLevel=mapView.getZoomLevel();
onTapAllowed=false;
}
return super.onTouchEvent(motionEvent, mapView);
}
@Override
public boolean onTap(GeoPoint geoPoint, MapView mapView) {
if (!onTapAllowed) {
Log.d("onTap","onTap cancelled, zoom level changed...");
lastZoomLevel=mapView.getZoomLevel();
onTapAllowed=true;
return true;
}
//...
}