OnTouch en MapView solo se dispara la primera vez

Estoy tratando de implementar una función de zoom de doble toque en mi MapView. El evento siempre se dispara la primera vez, pero nunca las posteriores. Abajo está mi código. Tengo la sensación de que tiene algo que ver con que el controlador del mapa se pierda después de la primera vez que se dispara el evento.

import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;

public class mainmap extends MapActivity implements OnTouchListener{

    long lasttime = -1;
    MapController mapc;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        MapView mapView = (MapView) findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);
        mapc = mapView.getController();
        mapView.setOnTouchListener(this);       
    }

    @Override
    protected boolean isRouteDisplayed() {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN){

            if(event.getEventTime()-lasttime<2000){
                mapc.zoomInFixing((int)event.getX(),(int)event.getY());             
            }
        }       
        lasttime=event.getEventTime();
        return true;
    }

  }

También he intentado editar el método OnTouch para transmitir la Vista entrante a un MapView, obteniendo el controlador mientras se dispara el evento. Sin embargo, obtengo los mismos resultados cuando se dispara el primer evento pero no los siguientes.

public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN){

            if(event.getEventTime()-lasttime<2000){
                ((MapView)v).getController().zoomInFixing((int)event.getX(), (int)event.getY());                
            }
        }       
        lasttime=event.getEventTime();
        return true;
    }

Siendo lo más básico posible, corté todo el código en el método OnTouch y lo programé para mostrar simplemente un pequeño mensaje de tostada.

public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN){

               Toast.makeText(this,"Down!",Toast.LENGTH_SHORT).show();

        }       

        return true;
}

Esto funciona como se esperaba, mostrando el Toast cada vez que se toca MapView.

No entiendo por qué el evento se disparará correctamente en este caso, pero no en mi implementación anterior.

Respuestas a la pregunta(6)

Su respuesta a la pregunta