Как я могу реализовать свой собственный двойной тап в MapView? - PullRequest
1 голос
/ 04 января 2012

Я работал над автономной картой, используя OSMdroid

У меня есть карты с двумя уровнями увеличения, а именно 12 и 15

Теперь обычный двойной тап увеличивает масштаб карты на 1 уровень

То, что я пытаюсь сделать, это setZoomLevel() как 15 после того, как пользователь дважды нажмет на карту,

Возможно ли это?

Я пытался использовать onGestureListener, но как-то не работает

Любая подсказка или подсказки в этом направлении или примеры кодов будут большой помощью, спасибо

Ответы [ 4 ]

3 голосов
/ 04 января 2012

У меня было такое же требование с Osmdroid MapView, в котором я не хотел, чтобы он выполнял функцию «центрирование в месте двойного касания и увеличение» по умолчанию.Я хотел, чтобы он поднял тост.В моем случае у меня был оверлей поверх MapView, поэтому я просто использовал оверлей, использующий двойной метод в методе onDoubleTap.Для ваших целей вы можете просто добавить наложение, которое ничего не рисует, но имеет собственную функцию двойного нажатия.

Так что в конце вашего onCreate вы можете добавить наложение.Это маленькое приложение, кажется, демонстрирует то, что вы хотите - (вам нужно добавить условный код для проверки уровня масштабирования и других манипуляций):

public class OsmdroidDemoMap extends Activity {

    private MapView         mMapView;
    private MapController   mMapController;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.osm_main);
        mMapView = (MapView) findViewById(R.id.mapview);
        mMapView.setTileSource(TileSourceFactory.MAPNIK);
        mMapView.setBuiltInZoomControls(true);
        mMapController = mMapView.getController();
        mMapController.setZoom(13);
        GeoPoint gPt = new GeoPoint(51500000, -150000);
        mMapController.setCenter(gPt);
        DummyOverlay dumOverlay = new DummyOverlay(this);
        List<Overlay> listOfOverlays = mMapView.getOverlays();
        listOfOverlays.clear();
        listOfOverlays.add(dumOverlay);
    }

    public class DummyOverlay extends org.osmdroid.views.overlay.Overlay {

        public DummyOverlay(Context ctx) {
            super(ctx); // TODO Auto-generated constructor stub
        }

        @Override
        protected void draw(Canvas c, MapView osmv, boolean shadow) {}

        @Override
        public boolean onDoubleTap(MotionEvent e, MapView mapView) {
            // This stops the 'jump to, and zoom in' of the default behaviour
            int zoomLevel = mMapView.getZoomLevel();
            mMapController.setZoom(zoomLevel + 3);
            return true;// This stops the double tap being passed on to the mapview
        }
    }
1 голос
/ 04 января 2012

Если вам нужно управлять двойным касанием в MapView, я предлагаю вам проверить эту ветку:

карты Android: как долго нажимать на карту?

Вы можете увидеть мой ответ и то, как я адаптировался mapview-overlay-manager .

0 голосов
/ 20 марта 2014

В последней версии OSMdroid Library 4.0 имеется встроенное автоматическое двойное увеличение. Но нет ничего лучше, чем управление масштабированием.

0 голосов
/ 04 января 2012

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

ZoomControls zoomControls = (ZoomControls)findViewById(R.id.zoomControl);

View zoomOut = zoomControls.getChildAt(0);
zoomOut.setBackgroundDrawable(getResources().getDrawable(R.drawable.zoom_out_icon));
zoomOut.setPadding(5, 5, 5, 5);

View zoomIn = zoomControls.getChildAt(1);
zoomIn.setBackgroundDrawable(getResources().getDrawable(R.drawable.zoom_in_icon));
zoomIn.setPadding(5, 5, 5, 5);

zoomControls.setOnZoomInClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            mc.zoomIn();
            mapView.invalidate();
        }
});
zoomControls.setOnZoomOutClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            mc.zoomOut();
            mapView.invalidate();
        }
});

теперь вы можете реализовать свой собственный зум

...