Я пытаюсь реализовать функцию двойного касания в моем MapView. Событие всегда запускается в первый раз, но никогда в последующие. Ниже мой код. У меня такое ощущение, что это как-то связано с потерей контроллера карты после первого запуска события.
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;
}
}
Я также попытался отредактировать метод OnTouch для приведения входящего вида в MapView, получая контроллер во время запуска события. Тем не менее, я получаю те же результаты, когда запускается первое событие, но не последующие.
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;
}
Будучи как можно более простым, я вырезал весь код в методе OnTouch и запрограммировал его так, чтобы он просто отображал маленькое сообщение с тостами.
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN){
Toast.makeText(this,"Down!",Toast.LENGTH_SHORT).show();
}
return true;
}
Это работает, как и ожидалось, отображая тост при каждом прикосновении к MapView.
Я не понимаю, почему событие сработает правильно в этом случае, но не в моей предыдущей реализации.