禁用com.google.android.maps.MapView中的平移/缩放功能

12

如何禁用MapView的平移/缩放功能(不是缩放控件,我想要完全静态的地图)?

我还注意到点击地图似乎不会触发MapView的onClickListener,有人能解释一下为什么吗?


这个解决方案可能会对你有所帮助。http://stackoverflow.com/questions/6439811/can-panning-zooming-be-disabled-in-an-android-mapview-while-allowing-users-to-cl/9405201#9405201 - Dwayne
7个回答

22

对于Android上的Google Maps API的版本2,以下是正确的方式:

map.getUiSettings().setScrollGesturesEnabled(false);

不禁用所有手势。请检查我的答案。 - Taranfx

15

这是保证会工作的

mapView.getMap().getUiSettings().setAllGesturesEnabled(false);

请注意,这个问题是关于Maps API v1时代的。这个答案适用于API v2。 - laalto
2
@laalto 现在检查的所有人都在v2上。将帮助今天看到答案的每个人。 - Taranfx

11

在您的布局文件中使用android:clickable="false"


哦,我现在明白了,似乎我的尝试在mapView上设置setOnClickListener导致了滚动,尽管在布局文件中设置了android:clickable="false"。 - Juliusz
仍然存在在mapView上的OnClickListener问题。 - Juliusz
@Julius:MapView是闭源的。没有人会回答你的onClickListener问题。 - CommonsWare

1

我曾经有同样的问题,以下解决方案是我能找到并且满足我的要求的最佳方案:

mapView.setOnTouchListener(new OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getPointerCount() > 1) {
                return true;
            }
            return false;
        }
    });

如Alexander Stolz在此处发布的:

如何在Android MapView中禁用捏合手势

这就是原因:

它并没有完全禁用对地图视图的点击 - 它只是抓住并阻止了双指手势(缩放需要两个手指) - 在地图上轻触(例如在覆盖层上)仍然有效。



0

这是正确的方式

@Override
public boolean dispatchTouchEvent(MotionEvent ev)
{   
    switch (ev.getAction()&MotionEvent.ACTION_MASK)
    {
        case (MotionEvent.ACTION_DOWN):
        {   
            // do what you want
            // you may scroll map where you want
            // don't use 'break', the same in case pointer events;

            //break;
            return true;
        }
    }
    // 'super' go to the mapView procedures and scroll map in own algorithm
    return super.dispatchTouchEvent(ev);
}

0
在你的onMapReady方法中,添加以下代码行。
gMap.getUiSettings().setZoomGesturesEnabled(false);

禁用所有手势

gMap.getUiSettings().setAllGesturesEnabled(false);

编程愉快 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接