MapView onTap не запускается для OverlayItem onTap - PullRequest
0 голосов
/ 23 мая 2011

В моем приложении есть отображение карты, и все работает потрясающе с touchEvents.

Однако, чтобы максимизировать использование приложения, я также пытался добавить функциональность интерфейса trackBall и столкнулся с проблемой.

Трекбол правильно прокручивает mapView, когда он находится в фокусе, однако я не могу вызвать событие onTap, когда пользователь центрируется на элементе наложения.

Когда я нажимаю кнопку мыши (я использую эмулятор), чтобы симулировать щелчок пользователем трекбола (F6 задействован трекбол), ничего не происходит .. Код onTrackBallEvent никогда не срабатывает в этой ситуации, что я ожидаю, учитывая API В документах говорится, что в этом случае должно быть запущено onTap, но оно также не запускается.

Если я не отцентрирован на оверлейном элементе, я получаю события ACTION_DOWN и ACTION_UP в onTrackBallEvent, только когда карта центрируется на оверлейном элементе, onTrackBallEvent не срабатывает. К сожалению, события onTap также не запускаются. Очевидно, что ОС что-то делает с этими щелчками, когда оверлей находится в центре экрана, и пользователь нажимает на трекбол, но я буду проклят, если смогу понять, что это такое.

Кто-нибудь знает, какое событие мне следует искать?

Ответы [ 3 ]

1 голос
/ 19 сентября 2012

Это довольно старая проблема, но я решил отдать свои 2 цента. По какой-то причине вам нужно добавить наложение где-то на карте, прежде чем переопределение onTap () сможет добавить другие наложения, где вы щелкнете. Я использовал:

public boolean onTap(GeoPoint p, MapView mapView) {
    boolean tappedAnOverlay = super.onTap(p, mapView);
    if (tappedAnOverlay) {
        // do your thing if hit an overlay
    }
    else {
        // no overlay found in that location
    }

    MapController mc = mapView.getController();
    mc.animateTo(p);

    return true;

} 
0 голосов
/ 24 мая 2011

пожалуйста, попробуйте это.Это используется для отображения нескольких оверлеев на виде карты, возможно, это решит проблему: https://github.com/donnfelker/android-mapviewballoons

0 голосов
/ 23 мая 2011

Для этого работает с этим.Я проверяю, совпадает ли точка попадания на экране с каким-либо элементом наложения.

        public boolean onTouchEvent(MotionEvent event, MapView mv) {
        final int action=event.getAction();
        final int x=(int)event.getX();
        final int y=(int)event.getY();

        if(!this.marker.equals(getResources().getDrawable(R.drawable.parada))){
            if (action == MotionEvent.ACTION_DOWN) {
                        for (OverlayItem item : mItems) {
                        Point p = new Point(0,0);                       
                        mv.getProjection().toPixels(item.getPoint(), p);                        
                        if (hitTest(item, marker, x-p.x, y-p.y) && item.getSnippet()!= "parada") {
...