onDoupleTap не срабатывает

Я хочу создать представление карты, которое реагирует на двойной щелчок, получить геоточку места, по которому щелкнули, и вернуть его вызывающей активности. Я тестирую свое приложение в эмуляторе eclipse, но когда я дважды щелкаю карту, ничего не происходит, и мой метод onDoubleTap() никогда не входит

вот мой код

public class MYMapActivity extends MapActivity implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener{

GestureDetector gestureDetector;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mymapview);
        MapView mapView = (MapView) findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);

        gestureDetector = new GestureDetector(getApplicationContext(), this);
        gestureDetector.setOnDoubleTapListener(this);
    }
@Override
    protected boolean isRouteDisplayed() {
        return false;
    }

    @Override
    public boolean onDoubleTap(MotionEvent mev) {
        MapView mapView = (MapView) findViewById(R.id.mapview);
        Projection p = mapView.getProjection();
        GeoPoint geoPoint = p.fromPixels((int) mev.getX(), (int) mev.getY());
        int latitude = geoPoint.getLatitudeE6();
        int longitude = geoPoint.getLongitudeE6();
        Intent resultIntent = new Intent();
        resultIntent.putExtra("latitude", latitude);
        resultIntent.putExtra("longitude", longitude);
        setResult(Activity.RESULT_OK, resultIntent);
        finish();
        return true;
    }

    @Override
    public boolean onDoubleTapEvent(MotionEvent e) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean onDown(MotionEvent e) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void onLongPress(MotionEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
            float distanceY) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void onShowPress(MotionEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        // TODO Auto-generated method stub
        return false;
    }

}

что не так или что упущено, из-за чего мой двойной тап никогда не срабатывает ??


person Dorgham    schedule 13.07.2012    source источник


Ответы (2)


Я понял, чего не хватает в моем коде, и я пишу это здесь для всех, кто может столкнуться с той же проблемой.

первый:

Я должен добавить эту строку после инициализации объекта жесткого детектора.

        gestureDetector = new GestureDetector(this, this);
        gestureDetector.setOnDoubleTapListener(this);
        mapView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                return gestureDetector.onTouchEvent(event);
            }
        });

второе: я должен вернуть true в методе onDown, так как он вызывается при каждом щелчке, и от него зависит двойное нажатие

@Override
public boolean onDown(MotionEvent e) {
    return true;
}

это все, что вам нужно для реализации прослушивателя doubleTap в вашей деятельности.

person Dorgham    schedule 16.07.2012

Пусть ваша активность реализует только OnGestureListener, а внутри onCreate() сделайте

    gd.setOnDoubleTapListener(new OnDoubleTapListener()  
            {  //all the override functions of the listener go here // 
});

После onCreate() идут все те функции, которые вы хотите переопределить для onGesturelistener, включая эту, которую вы забыли:

@Override  
    public boolean onTouchEvent(MotionEvent event)  
    {  
        return gd.onTouchEvent(event);//return the double tap events  
    }  
person Erol    schedule 13.07.2012
comment
извините, но тоже не сработало :( ... в чем разница между вашим кодом и моим - person Dorgham; 13.07.2012