Pinch to zoom with Osmdroid

纵然是瞬间 提交于 2019-12-18 13:08:17

问题


I've written a mapping application which has two activities, one activity displays a Google Maps view, the other displays the equivalent view using osmdroid 3.0.5 jar.

Until now I've been testing on emulators only and the functionality is completely identical in terms of area shown and overlay data. Now I have run the app on a real Gingerbread device, I notice that the Google Maps activity seems to support pinch to zoom, whilst the Osmdroid one doesn't.

I haven't written any code specific to pinch to zoom for the Google side or for Osmdroid. Both activities implement OnTouchListener. Both activities just have a stub for OnTouch like:

@Override
public boolean onTouch(View v, MotionEvent e) {
    // chain it for now
    return false;
}

My mapview in the Osmdroid activity is of the class: org.osmdroid.views.MapView

Does anybody know how to make pinch to zoom work with osmdroid or know of a sample application using osmdroid that I could study and adapt into my app?


回答1:


Osmdroid has the functionality to zoom. You will need to setup a gesturelistener to check for the pinch action, at which point you should call the zoom function in osmdroid. I believe in osmdroid 3.0.5 it is something like

mOsm.getController.setZoomLevel(someNumber) (mOsm is an instance of the map view).

I have the zoom function working for the opposite pinch (you fingers start close together and then expand). I suggest using a MotionEvent (like you are currently doing) and doing something like this:

boolean finished = false;

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

    switch (e.getAction()) {

        case MotionEvent.ACTION_DOWN:
            finished = false;
            break;

        case MotionEvent.ACTION_MOVE:
            finished = false;
            break;

        case MotionEvent.ACTION_UP:
            //action is finishing at this point, so now I can do my refreshActionOnMap();
            if (!finished) 
                refreshActionOnMap();
            break;
    }
    return true;
}

The code I have added deals with the pinch - the finished boolean is something I implemented in my program to figure out when to refresh the map. That should help you out more.

Here is a further explanation of this.

If you are looking for something different, then try reading here. Android has been supporting the pinch action since June 2010 apparently.




回答2:


MapView.setBuiltInZoomControls(true);
MapView.setMultiTouchControls(true);



回答3:


Is it possible not to zoom to the map center but to the middle of users two finger.



来源:https://stackoverflow.com/questions/7583281/pinch-to-zoom-with-osmdroid

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!