Sto tentando di implementare una funzione di zoom con doppio tocco nel mio MapView. L'evento si attiva sempre la prima volta, ma mai in momenti successivi. Di seguito è il mio codice. Ho la sensazione che abbia qualcosa a che fare con il controller della mappa che si perde dopo la prima volta che l'evento viene sparato.OnTouch in MapView scatta solo la prima volta
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;
}
}
Ho anche provato la modifica del metodo di OnTouch per lanciare la visualizzazione in entrata a un MapView, ottenendo il controller mentre l'evento viene generato. Tuttavia, ottengo gli stessi risultati in cui viene sparato il primo evento ma non quelli successivi.
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;
}
Essere come base, come possibile, ho tagliato fuori tutto il codice nel metodo OnTouch e programmato per visualizzare semplicemente un piccolo messaggio brindisi.
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN){
Toast.makeText(this,"Down!",Toast.LENGTH_SHORT).show();
}
return true;
}
Questo funziona come previsto, visualizzando il Toast ogni volta che si tocca MapView.
Non capisco perché l'evento verrà attivato correttamente in questo caso ma non nella mia precedente implementazione.
Grazie per il suggerimento. Cercherò di implementare un OnDoubleTapListener per gestire invece questa funzionalità. Sono ancora confuso però. Capisco che OnDoubleTapListener è probabilmente il modo migliore per gestirlo, ma il codice che ho postato in teoria dovrebbe funzionare, giusto? – amandion