Ответ 1
После долгих царапин и попыток различных подходов, этот пока работает хорошо. Код следует за событиями движения. Когда мы получаем событие ACTION_DOWN, он помечает флаг isPinch как ложный (мы не знаем, является ли он ущемлением или еще нет), но как только мы получим событие касания (т.е. ACTION_MOVE), включающее два пальца, isPinch установлен на true, и поэтому, когда происходит событие onTap(), он может видеть, был ли ущемленный или нет.
class MapOverlay extends com.google.android.maps.Overlay
{
private boolean isPinch = false;
@Override
public boolean onTap(GeoPoint p, MapView map){
if ( isPinch ){
return false;
}else{
Log.i(TAG,"TAP!");
if ( p!=null ){
handleGeoPoint(p);
return true; // We handled the tap
}else{
return false; // Null GeoPoint
}
}
}
@Override
public boolean onTouchEvent(MotionEvent e, MapView mapView)
{
int fingers = e.getPointerCount();
if( e.getAction()==MotionEvent.ACTION_DOWN ){
isPinch=false; // Touch DOWN, don't know if it a pinch yet
}
if( e.getAction()==MotionEvent.ACTION_MOVE && fingers==2 ){
isPinch=true; // Two fingers, def a pinch
}
return super.onTouchEvent(e,mapView);
}
}