OnTouch в MapView срабатывает только в первый раз

Я пытаюсь реализовать функцию масштабирования двойным касанием в моем 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, чтобы преобразовать входящий View в 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.

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

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

        }       

        return true;
}

1266] Я не понимаю, почему событие сработает правильно в этом случае, но не в моей предыдущей реализации.

6
задан amandion 8 September 2010 в 14:22
поделиться