Próbuję zaimplementować funkcję podwójnego dotknięcia zoomu w moim widoku mapy. Wydarzenie zawsze odpala za pierwszym razem, ale nigdy później. Poniżej znajduje się mój kod. Mam wrażenie, że ma to coś wspólnego z utratą kontroli nad mapą po pierwszym uruchomieniu zdarzenia.OnTouch w MapView uruchamia się tylko po raz pierwszy
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;
}
}
Próbowałem również edycję metody OnTouch do oddania przychodzącego View do MapView, coraz kontroler gdy zdarzenie jest zwolniony. Jednak otrzymuję te same wyniki, gdy pierwsze zdarzenie jest uruchamiane, ale nie kolejne.
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;
}
Będąc tak podstawowego, jak to możliwe, ja wyciąć cały kod w metodzie OnTouch i zaprogramować go po prostu wyświetla małą wiadomość toast.
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN){
Toast.makeText(this,"Down!",Toast.LENGTH_SHORT).show();
}
return true;
}
Działa to zgodnie z oczekiwaniami, wyświetlając tost za każdym razem, gdy dotykany jest MapView.
Nie rozumiem, dlaczego wydarzenie zostanie prawidłowo uruchomione w tym przypadku, ale nie we wcześniejszej implementacji.
Dzięki za sugestię. Spróbuję zaimplementować OnDoubleTapListener do obsługi tej funkcji. Nadal jestem zdezorientowany. Rozumiem, że OnDoubleTapListener jest prawdopodobnie najlepszym sposobem na poradzenie sobie z tym, ale kod, który napisałem w teorii, powinien działać, prawda? – amandion