Как управлять моим наложением на карту? - PullRequest
0 голосов
/ 22 сентября 2011

Я хочу добавить новое место, когда я долго касаюсь карты, но могу, но проблема в том, что когда я добавляю оверлей, я не могу перемещать карту. Код ниже.

public class CustomPinPointOverlay extends ItemizedOverlay<OverlayItem> {

    private GeoPoint newMarkerLocation;

    public CustomPinPointOverlay(GeoPoint newMarkerLocation,
            Drawable defaultMarker) {

        super(boundCenterBottom(defaultMarker));
        this.newMarkerLocation = newMarkerLocation;
        populate();
    }

    @Override
    protected OverlayItem createItem(int i) {
        return new OverlayItem(this.newMarkerLocation, null, null);
    }

    public void draw(android.graphics.Canvas canvas, MapView mapView,
            boolean shadow) {
        super.draw(canvas, mapView, false);
    }

    @Override
    public int size() {
        return 1;
    }
}

это мой оверлейный класс, который расширяет itemizedoverlay. другая часть кода:

public PMapView(Context context, AttributeSet attrs) {
    super(context, attrs);

  setOnTouchListener(new OnTouchListener() {

        int x, y;
        long start, stop;


        @Override
        public boolean onTouch(View v, MotionEvent e) {

            if (e.getAction() == MotionEvent.ACTION_DOWN) {

                start = e.getEventTime();
                x = (int) e.getX();
                y = (int) e.getY();

                touchedPoint = map.getProjection().fromPixels(x, y);
            }
            if (e.getAction() == MotionEvent.ACTION_UP) {
                stop = e.getEventTime();

            }

            if (stop - start > 1000) {

                setEnabled(true);
                Drawable myMarker = getResources().getDrawable(
                        R.drawable.yeni_pin);
                getOverlays().add(
                        new CustomPinPointOverlay(touchedPoint, myMarker));


                return false;
            }


            return true;
        }


    });

}

что не так с этим кодом?

1 Ответ

1 голос
/ 15 декабря 2011

Этот ответ предполагает, что ваш PMapView расширяет MapView.

Если приведенное выше утверждение верно, вы должны попытаться вызвать onTouchEvent вашего суперкласса, если вы не справитесь с этим. Например (это ваш код изменен, но я его не проверял)

@Override
    public boolean onTouch(View v, MotionEvent e) {

        boolean retValue = true;
        if (e.getAction() == MotionEvent.ACTION_DOWN) {

            start = e.getEventTime();
            x = (int) e.getX();
            y = (int) e.getY();

            touchedPoint = map.getProjection().fromPixels(x, y);
        }
        if (e.getAction() == MotionEvent.ACTION_UP) {
            stop = e.getEventTime();

        }

        if (stop - start > 1000) {

            setEnabled(true);
            Drawable myMarker = getResources().getDrawable(
                    R.drawable.yeni_pin);
            getOverlays().add(
                    new CustomPinPointOverlay(touchedPoint, myMarker));


            retValue = false;
        }

        if(!retValue)
            super.onTouchEvent(e);
        return retValue;
    }

Приведенный выше код передаст действия, которые не были захвачены (ваш длинный щелчок захвачен) обратно родителю, чтобы он мог обрабатывать такие вещи, как перемещение карты. Этот код не был протестирован, поэтому он может дать странные результаты. Вы можете удалить if(!retValue) и просто всегда звонить super.onTouchEvent(e).

...